Ich möchte ein XML-Dokument transformieren. Die Quelle XML sieht wie folgt aus:Dynamische Elementnamen
<svc:ElementList>
<svc:Element>
<Year>2007</Year>
</svc:Element>
<svc:Element>
<Year>2006</Year>
</svc:Element>
<svc:Element>
<Year>2005</Year>
</svc:Element>
</svc:ElementList>
ich, dass in machen wollen:
<ElementList>
<NewTag2007/>
<NewTag2006/>
<NewTag2005/>
</ElementList>
Die folgende Codezeile funktioniert nicht:
<xsl:element name="{concat('NewTag',Element/Year)}"/>
Die Ausgabe ist eine Serie von Elementen, die wie folgt aussehen: < NewTag>. (Ohne Leerzeichen ...)
"// Element/Jahr", "./Element/Year" und "// svc: Element/Jahr" auch nicht funktionieren. Eine Schwierigkeit besteht darin, dass sich das Tag "Element" im Namensraum "svc" befindet, während sich das Tag "Year" im Standardnamespace befindet.
Wie auch immer, stehe ich vor einem Namespace-Problem oder missbrauche ich die "concat()" Funktion?
Froh, dass die Lösung funktioniert. Aber generell würde ich empfehlen, während der Laufzeit KEINE Tag-Namen zu erstellen (obwohl es funktioniert!). Ich verstehe die XML-TAG-Struktur auf eine eher statische Art und Weise. Meine Lösung wäre: Nimm ein statisches XML-Tag wie mit einem solchen Attribut. Sie können weiterhin mit XSLT und XPath mit "element [year =" 2007 "] darauf zugreifen. Sie verlieren also nicht an Flexibilität, sondern gewinnen Sicherheit und Konsistenz ... Nur ein paar Worte. –
Sauer