ThomasM: xsl:element name=""

Beitrag lesen

Hallo Danzelot,

kann mir jemand sagen was das folgende bedeutet?

<xsl:element name="{name(.)}"

Damit werden Elemente mit dynamischen Namen ausgehend von den Namen der verarbeiteten Elemente erzeugt. Das Konstrukt {...} ist dabei ein Attribute Value Template (AVT).

Kleines Beispiel:

XML-Dokument:

<?xml version="1.0" encoding="ISO-8859-1"?>  
<root>  
  <x>1</x>  
  <y>2</y>  
  <z>3</z>  
</root>

XSL-Stylesheet:

<?xml version="1.0" encoding="ISO-8859-1"?>  
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
  <xsl:output method="xml" version="1.0" encoding="ISO-8859-1" indent="yes"/>  
  <xsl:template match="root">  
  
  <output>  
    <xsl:for-each select="*">  
      <xsl:element name="{name(.)}">...</xsl:element>  
    </xsl:for-each>  
  </output>  
  
  </xsl:template>  
</xsl:stylesheet>

Ergebnis:

<?xml version="1.0" encoding="ISO-8859-1"?>  
<output>  
   <x>...</x>  
   <y>...</y>  
   <z>...</z>  
</output>

Das ist nicht besonders originell, interessanter wäre z. B. eine erweiterte Benennung wie name="{concat(name(.),'_neu')}". Dann entsteht:

<?xml version="1.0" encoding="ISO-8859-1"?>  
<output>  
   <x_neu>...</x_neu>  
   <y_neu>...</y_neu>  
   <z_neu>...</z_neu>  
</output>

Grüße,
Thomas