Bonjour,
A partir du fichier XML suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
<?xml version="1.0"  ?>
<?xml-stylesheet href="monfichier.xsl" type="text/xsl" ?>
<a>
<ab x="x"><b>Test</b><a>z</a></ab>
<z x="x"><a>z</a></z>
</a>
Je cherche à obtenir une copie filtrée (le même fichier sans la déclaration xml-stylesheet et avec uniquement les éléments dont le nom contient “a”):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
<?xml version="1.0" encoding="ISO-8859-1"?>
<a>
<ab x="x"><a>z</a></ab>
 
</a>
Pour ça, j’examine les différences entre deux solutions possibles, les instructions ‘copy’ et ‘element’ :

AVEC COPY :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" version="1.0" encoding="ISO-8859-1"/>
<xsl:variable name="var" select="//[contains(name(),'a')]"/>
<xsl:template match="/">
<xsl:copy select="$v"/>
</xsl:template>
</xsl:stylesheet>
Avec un ‘if’ :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" version="1.0" encoding="ISO-8859-1"/>
<xsl:template match="/">
<xsl:if test="*[contains(name(),'a')]">
<xsl:copy select="."/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
AVEC ELEMENT:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" version="1.0" encoding="ISO-8859-1"/>
<xsl:variable name="ele" select="//[contains(name(),'a')]"/>
<xsl:template match="/">
<xsl:element name="{$ele}"/>
</xsl:template>
</xsl:stylesheet>
Malheureusement, les deux codes me renvoient la même erreur dans Firefox :
« Erreur lors du chargement de la feuille de style : Échec de l'analyse XPath : test de Name ou de Nodetype attendu: »

Je dois dire que je ne comprends pas !!

Merci pour vos lumières !