Hallo,
Durch meine Transformation werden alle Elemente transformieren. Allerdings sollen alle bplan:fachobjekt Elemente nicht ins Zieldokument übernommen werden. Weiter soll das bplan:BPlan Element, welches nicht (wie im Quellfile zu sehen ist) nach dem bplan:ebene Element geschlossen wird, sondern alle folgenden Elemente beinhaltet (siehe Zieldokument.
Mein Ansatz ist:<xsl:for-each select="//gml:featureMember/*">
Damit triffst jede "gml:featureMember" auch die mit dem Kind-Element "bplan:BPlanEbene" und führst auch für sie die Templateregel aus.
<xsl:template name="objekt_bauen">
<xsl:for-each select=".">
for-each ist hier unnötig, du führst bereits ein for-each für das Kind-Element / die Kind-Elemente von gml:featureMember aus.
So könnte aussehen was du möchtest:
-----------------------------------
<xsl:for-each select="//gml:featureMember[bplan:BPlan]/*">
<!-- nur für gml:featureMember die als Kind-Element ein bplan:BPlan haben-->
<xsl:call-template name="objekt_bauen"/>
</xsl:for-each>
<xsl:template name="objekt_bauen">
<!-- erstellt z.B. ein bplan:BPlan-Element -->
<xsl:element name="{name()}">
<xsl:attribute name="fid">
<xsl:value-of select="@gml:id"/>
</xsl:attribute>
<!-- für alle Kind-Elemente vom bplan:BPlan -->
<xsl:for-each select="*">
xsl:choose
<!-- bei Element bplan:ebene mache folgendes -->
<xsl:when test="name() = 'bplan:ebene'">
<xsl:element name="{name()}">
<!-- ruft das entsprechende Template auf -->
<xsl:apply-templates select="//gml:featureMember[bplan:BPlanEbene]" />
</xsl:element>
</xsl:when>
<!-- für alle anderen Kind-Elemente -->
xsl:otherwise
<xsl:element name="{name()}">
xsl:choose
<!--Hier stehen Ausgaben von Attributen, etc. -->
</xsl:choose>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="bplan:ebene">
</xsl:for-each>
</xsl:element>
</xsl:template>
<xsl:template match="gml:featureMember[bplan:BPlanEbene]">
<!-- matcht nur gml:featureMember-Elemente mit einem bplan:BPlanEbene Kind-Element -->
<!-- erstellt z.B. ein bplan:BPlanEbene]-Element -->
<xsl:element name="{name()}">
<xsl:attribute name="fid">
<xsl:value-of select="@gml:id"/>
</xsl:attribute>
<xsl:for-each select="*[name() != 'bplan:fachobjekt']">
<xsl:element name="{name()}">
xsl:choose
<!--Hier stehen Ausgaben von Attributen, etc. -->
</xsl:choose>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
--------------------------------------
Grüße
Thomas
PS: ist dir aufgefallen, dass du eigentlich keine Frage gestellt hast?