2 votes

XSLT sélectionner les noeuds avec espace de nom

J'essaie d'obtenir les valeurs de quelques balises d'un xml en utilisant xslt. Ma liste.xml :

<a>
 <na:Data xmlns:na="http://some_site.com#" Ref="http://another_site.com" 
  Key="value">
  <b>
    <c>some_c_attrib</c>
    <d>some_d_attrib</d>
    <e>some_e_attrib</e>
    <f>some_f_attrib</f>
    <g>some_g_attrib</g>
  </b>
  <h>
   <i>some_i_attrib</i>
   <j>some_j_attrib</j>
  </h>
 </na:Data>
 <da:Newtag xmlns:da="http://new_site.com">
   <k name="http://new_new_site.com"/>
 </da:Newtag>
</a>

Ma liste.xsl :

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:my="http://some_site.com#"
    exclude-result-prefixes="my">
    <xsl:output method="html" encoding="UTF-8" />
    <xsl:template match="/">
        <html>
            <body>
                <xsl:for-each select="/a/my:Data/my:e">
                  <h1><xsl:value-of select="f" /></h1>
                </xsl:for-each>
            </body>
        </html> 
    </xsl:template>
</xsl:stylesheet>

La sortie que j'obtiens est :

<html>
  <body>
    <h1/>
  </body>
</html>

Je veux que la sortie soit :

<html>
  <body>
    <h1>some_f_attrib</h1>
  </body>
</html>

De même, je veux également obtenir les valeurs d'attribut pour c, d, e, etc. L'espace de noms crée un problème. Sans espace de noms, je suis capable d'accéder aux valeurs des attributs. Je suppose que je me trompe dans les instructions for-each et value-of select.

Merci

2voto

Mads Hansen Points 24537

Il y a deux problèmes.

  1. Tout d'abord, le f est un enfant de b pas e .
  2. Même si c'était un enfant de e le e n'est pas lié à un espace de nom, et votre XPath tente d'adresser l'élément my:e .

Ajustez le XPath dans votre for-each pour :

<xsl:for-each select="/a/my:Data/b">
  <h1><xsl:value-of select="f" /></h1>
</xsl:for-each>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X