Domanda

Sto applicando un foglio di stile XSLT al seguente file XML:

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

Ecco il mio file XSLT corrente (esegue un ordinamento semplice):

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

Il problema è che non so esattamente come usare il prefisso dello spazio dei nomi 'doc:' con i tag xsl: template e xsl: apply-templates.

In questo momento, il documento XML viene copiato così com'è, quindi credo che sia stato applicato il primo blocco xsl: template. Tuttavia, gli elementi non sono ordinati, quindi penso che il problema risieda nel secondo modello xsl:

Dovrei notare che se rimuovo gli attributi xmlns da entrambi i file, la trasformazione funziona correttamente.

Qualche suggerimento?

(la domanda si basa su questo esempio )

È stato utile?

Soluzione

Hai provato a aggiungere un prefisso ai nomi degli elementi con il prefisso dello spazio dei nomi doc: nei tuoi attributi select?

<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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top