Frage

Ich möchte ein XML-Dokument transformieren.Das Quell-XML sieht folgendermaßen aus:

<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 möchte daraus Folgendes machen:

<ElementList>
    <NewTag2007/>
    <NewTag2006/>
    <NewTag2005/>
</ElementList>

Die folgende Codezeile funktioniert nicht:

<xsl:element name="{concat('NewTag',Element/Year)}"/>

Die Ausgabe besteht aus einer Reihe von Elementen, die wie folgt aussehen: < NewTag >.(Ohne die Leerzeichen...)

„//Element/Jahr“, "./Element/Jahr", Und "//svc:Element/Jahr" funktionieren auch nicht.Eine Komplikation besteht darin, dass sich das Tag „Element“ im Namespace „svc“ befindet, während sich das Tag „Year“ im Standard-Namespace befindet.

Stehe ich also vor einem Namespace-Problem oder verwende ich falsch die Funktion „concat()“?

War es hilfreich?

Lösung

Wahrscheinlich Probleme mit dem Namespace und möglicherweise eines mit dem aktuellen Kontext.Für die Quelle (mit hinzugefügter Namespace-Deklaration, um eine wohlgeformte XML-Datei zu erstellen)

<svc:ElementList xmlns:svc="svc">
  <svc:Element>
    <Year>2007</Year>
  </svc:Element>
  <svc:Element>
    <Year>2006</Year>
  </svc:Element>
  <svc:Element>
    <Year>2005</Year>
  </svc:Element>
</svc:ElementList>

das Stylesheet

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:svc="svc"
                version="1.0">
  <xsl:template match="svc:ElementList">
    <xsl:element name="{local-name()}">
      <xsl:for-each select="svc:Element">
        <xsl:element name="{concat('NewTag', Year)}"/>
      </xsl:for-each>
    </xsl:element>
  </xsl:template> 
</xsl:stylesheet>

erhalten Sie die Ausgabe, die Sie benötigen.Beachten Sie, dass svc:Element muss unter Verwendung des Namespace-Präfixes ausgewählt werden und dass der Kontext beim Generieren der neuen Tags vorhanden ist svc:Element, nicht svc:ElementList.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top