Question

Je souhaite transformer un document XML.Le XML source ressemble à ceci :

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

Je veux transformer cela en :

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

La ligne de code suivante ne fonctionne pas :

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

Le résultat est une série d’éléments qui ressemblent à ceci : < Nouvelle Balise >.(Sans les espaces...)

"//Élément/Année", "./Élément/Année", et "//svc:Élément/Année" ne fonctionne pas non plus.Une complication est que la balise "Element" se trouve dans l'espace de noms "svc" tandis que la balise "Year" se trouve dans l'espace de noms par défaut.

Quoi qu'il en soit, suis-je confronté à un problème d'espace de noms ou est-ce que j'utilise mal la fonction "concat()" ?

Était-ce utile?

La solution

Probablement des problèmes d'espace de noms et peut-être un avec le contexte actuel.Pour la source (avec déclaration d'espace de noms ajoutée pour le rendre XML bien formé)

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

la feuille de style

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

vous donnera le résultat dont vous avez besoin.Noter que svc:Element doit être sélectionné en utilisant le préfixe d'espace de noms et que le contexte lors de la génération des nouvelles balises est svc:Element, pas svc:ElementList.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top