xsl:value-of verwendet xsl:element name
Habe ich eine eingehende XML-Datei mit einer Liste-Struktur:
<list>
<listItem>
<name>elementOne</name>
<value>elementOneValue</name>
</listItem>
<listItem>
<name>elementTwo</name>
<value>elementTwoValue</name>
</listItem>
</list>
Die ich versuche zu konvertieren, um diese Struktur:
<elementOne>elementOneValue</elementOne>
<elementTwo>elementTwoValue</elementTwo>
Dies ist einfache Logik zu implementieren, die mit XSL, aber ich bin mit aber zu Komplikationen.
<xsl:for-each select="/list/listItem">
<xsl:element name="<xsl:value-of select="name"/>">
<xsl:value-of select="value"/>
</xsl:element>
</xsl:for-each>
Nicht funktioniert, denn ich gehe davon aus das sequentielle doppelte Anführungszeichen sind, bricht die <xsl:element>
tag
<xsl:for-each select="/list/listItem">
<<xsl:value-of select="name"/>>
<xsl:value-of select="value"/>
</<xsl:value-of select="name"/>>
</xsl:for-each>
Nicht funktioniert, weil ich nicht verwenden können <<
oder >>
und
<xsl:for-each select="/list/listItem">
<<xsl:value-of select="name"/>>
<xsl:value-of select="value"/>
</<xsl:value-of select="name"/>>
</xsl:for-each>
Nicht, weil ich am Ende mit > und < in meinem code statt der XML-parseable <
oder >
. Ich erwartete, dass dies eine sehr einfache Lösung, aber ich kann nicht finden, werden alle Datensätze, für die es auf dem internet. Was ist die einfache Lösung, die ich im Blick?
- Gute Frage, +1. Siehe meine Antwort für eine vollständige und kurze Lösung, mit
<xsl:element>
. 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine vollständige und kurze Lösung, mit der
<xsl:element>
XSLT-Anweisung:Wenn diese transformation wird angewendet auf das XML-Dokument (korrigiert zu werden, gut gebildet):
das erwartete Ergebnis produziert wird:
Tun, beachten Sie:
Die Nutzung der
<xsl:element>
Unterricht erstellen Sie ein element mit statisch unbekannte Namen.Die Verwendung von AVT - ( - Attribut-Wert-Template ) angeben, die
name
Attribut in kompakter und lesbarer Form.Es ist möglich für einen Fehler ausgelöst wenn die string-Werte von
elementOne
undelementTwo
gehorchen nicht der lexikalische/syntaktische Regeln für ein element-name (QName).Ich glaube, Sie können verwenden Sie geschweifte Klammern anstelle von
<xsl:value-of>
:Nicht versuchen, es, aber diese sollte funktionieren...