XSL-Übersicht / Konvertierung von XML nach XML / Konvertierung von Elementen in Attribute

Konvertierung von Elementen in Attribute

Konvertierung von Elementen in Attribute

➪ Lesen Sie, wie die Konvertierung von Elementen in Attribute mit Hilfe von Pfaden und Achsen einfach umgesetzt werden kann.

Das Beispiel verdeutlicht die Konvertierung von Elementen in Attribute mit Hilfe von XPath-Achsen, speziell child::*. Hierbei geht es darum, sämtliche Childnodes anzusprechen, die nur ein einziges Mal auftreten und daher für die Konvertierung in Attribute geeignet sind.


 <xsl:template match="/">
  <Ergebnis>
   <xsl:for-each select="/Orte/Ort">
    <Stadt>
     <xsl:for-each select="child::*[ count(child::*) = 0 ]">
      <xsl:attribute name="{local-name()}">
        <xsl:value-of select="./text()"/>
      </xsl:attribute>
     </xsl:for-each>
     <xsl:for-each select="Person">
      <Einwohner>
       <xsl:for-each select="child::*[position() &lt; 6]">
        <xsl:attribute name="{local-name()}">
          <xsl:value-of select="./text()"/>
        </xsl:attribute>
       </xsl:for-each>
       <xsl:for-each select="Kauf">
        <Einkauf>
         <xsl:for-each select="child::*">
          <xsl:attribute name="{local-name()}">
            <xsl:value-of select="./text()"/>
          </xsl:attribute>
         </xsl:for-each>         
         <xsl:attribute name="xpath">
          <xsl:for-each select="ancestor-or-self::*">
           <xsl:text>/</xsl:text>
           <xsl:value-of select="local-name()"/>
          </xsl:for-each>
         </xsl:attribute>
        </Einkauf>
       </xsl:for-each>
      </Einwohner>
     </xsl:for-each>
    </Stadt>
   </xsl:for-each>
  </Ergebnis>
 </xsl:template>

local-name(), node-name()

Die XPath-Funktion local-name() gibt den Namen eines Elements ohne Namespace-Präfix zurück. node-name() kann einen Präfix beinhalten, wenn ein Namespace zugeordnet ist.

Die Verwendung der -Funktion kann zu Problemen führen, wenn das XML-Dokument mit Namespaces arbeitet.

wg / 7. Januar 2018



Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf:

Vorname
Nachname
Mailadresse







Vielen Dank für Ihr Interesse an meiner Arbeit.


V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/XSL_XML2XML_E2A.html