Thomas J.S.: Transformationsproblem mittels XSLT

Beitrag lesen

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?