Je ne comprends pas vraiment la différence entre les fonctions XPath name
et local-name
.
Pourriez-vous donner un exemple d'une situation où ils seraient différents?
Étant donné cet exemple:
<?xml version="1.0" ?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head></head>
</html>
J'obtiens le même résultat avec ces deux requêtes: //*[local-name()="head"]
et //*[name()="head"]
. Pourquoi donc?
Avec le XML étant
<x:html xmlns:x="http://www.w3.org/1999/xhtml"/>
la feuille de style
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output indent="yes"/>
<xsl:template match="*">
<local-name><xsl:value-of select="local-name()"/></local-name>
<name><xsl:value-of select="name()"/></name>
</xsl:template>
</xsl:stylesheet>
les sorties
<local-name>html</local-name>
<name>x:html</name>
Ainsi, le résultat local-name()
est sans préfixe, le résultat the name()
peut inclure un préfixe.
Dans votre exemple avec une déclaration d'espace de noms par défaut, aucun préfixe n'est présent, donc name()
et local-name()
donnent le même résultat.