Thomas Meinike: Elemente in bestimmte Knoten einfügen

Beitrag lesen

Hallo,

Ich will das folgende XML Dokument kopieren und ergänzen, so dass alle Mitarbeiter, die jünger als 25 sind, den Knoten <Status>Ledig </Ledig> im <nachname> Konten enthalten.

Nicht besonders praxisnah ;-).

Also so :

...
<nachname>Meier
<status>Ledig</status>
</nachname>
...

Soll das wirklich mixed content werden?

Dann probiere es so:

  
<?xml version="1.0" encoding="UTF-8"?>  
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
  
 <xsl:output method="xml"/>  
  
 <xsl:template match="*|@*|node()">  
  <xsl:copy>  
   <xsl:apply-templates select="@*|node()"/>  
  </xsl:copy>  
 </xsl:template>  
  
 <xsl:template match="nachname">  
  <xsl:choose>  
    <xsl:when test="parent::node()[number(@alter) &lt; 25]">  
      <xsl:copy>  
        <xsl:apply-templates select="@*|node()"/>  
        <xsl:element name="Status">Ledig</xsl:element>  
      </xsl:copy>  
    </xsl:when>  
    <xsl:otherwise>  
      <xsl:copy>  
        <xsl:apply-templates select="@*|node()"/>  
      </xsl:copy>  
    </xsl:otherwise>  
  </xsl:choose>  
</xsl:template>  
</xsl:stylesheet>

Alternativ zur Ausgabe einer besseren Struktur in Form von

  
<mitarbeiter ...>  
  <nachname>Meier</nachname>  
  <status>Ledig</status>  
  ...  
</mitarbeiter>

im ersten xsl:when-Block schreiben:

  
    <xsl:when test="parent::node()[number(@alter) &lt; 25]">  
      <xsl:copy>  
        <xsl:apply-templates select="@*|node()"/>  
      </xsl:copy>  
      <xsl:element name="Status">Ledig</xsl:element>  
    </xsl:when>

MfG, Thomas