Domanda

Voglio trasformare un documento XML.L'XML di origine è simile al seguente:

<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>

Voglio trasformarlo in:

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

La seguente riga di codice non funziona:

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

L'output è una serie di elementi simili a questi: <Nuovo tag>.(Senza spazi...)

"//Elemento/Anno", "./Elemento/Anno", E "//svc:Elemento/Anno" non funzionano neanche.Una complicazione è che il tag "Element" si trova nello spazio dei nomi "svc" mentre il tag "Year" è nello spazio dei nomi predefinito.

Ad ogni modo, sto affrontando un problema di spazio dei nomi o sto utilizzando in modo improprio la funzione "concat()"?

È stato utile?

Soluzione

Probabilmente problemi di spazio dei nomi e forse uno con il contesto attuale.Per source (con aggiunta della dichiarazione dello spazio dei nomi per renderlo xml ben formato)

<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>

il foglio di stile

<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>

ti darà l'output di cui hai bisogno.Notare che svc:Element deve essere selezionato utilizzando il prefisso dello spazio dei nomi e che sia il contesto durante la generazione dei nuovi tag svc:Element, non svc:ElementList.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top