Question

J'applique une feuille de style XSLT au fichier XML suivant:

<top xmlns="http://www.foo.com/bar">
    <elementA />
    <elementB />
    <contents>
        <contentitem>
                <id>3</id>
                <moretags1 />
                <moretags2 />
        </contentitem>
        <contentitem>
                <id>2</id>
                <moretags1 />
                <moretags2 />
        </contentitem>
        <contentitem>
                <id>1</id>
                <moretags1 />
                <moretags2 />
        </contentitem>
    </contents>
</top>

Voici mon fichier XSLT actuel (effectue un tri simple):

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:doc="http://www.foo.com/bar">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
<!--                                                -->
 <xsl:strip-space elements="*"/>
<!--                                                -->
  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>
<!--                                                -->
  <xsl:template match="contents">
    <xsl:copy>
      <xsl:apply-templates select="@*"/>
      <xsl:apply-templates select="contentitem">
        <xsl:sort select="id" data-type="number"/>
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

Le problème, c'est que je ne sais pas exactement comment utiliser le préfixe d'espace de noms 'doc:' avec les balises xsl: template et xsl: apply-templates.

À l'heure actuelle, le document XML est copié tel quel, donc je pense que le premier bloc xsl: template est en cours d'application. Cependant, les éléments ne sont pas triés, donc je pense que le problème réside dans le deuxième xsl: template.

Je dois noter que si je supprime les attributs xmlns des deux fichiers, la transformation fonctionne correctement.

Des suggestions?

(la question est basée sur cet exemple )

Était-ce utile?

La solution

Avez-vous essayé de préfixer les noms d'éléments avec le préfixe doc: dans vos attributs de sélection?

<xsl:template match="doc:contents">
  <xsl:copy>
    <xsl:apply-templates select="@*"/>
    <xsl:apply-templates select="doc:contentitem">
      <xsl:sort select="doc:id" data-type="number"/>
    </xsl:apply-templates>
  </xsl:copy>
</xsl:template>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top