Ich verstehe den Unterschied zwischen den XPath-Funktionen name
und local-name
nicht wirklich.
Könnten Sie ein Beispiel für eine Situation nennen, in der sie sich unterscheiden würden?
In diesem Beispiel:
<?xml version="1.0" ?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head></head>
</html>
Mit diesen beiden Abfragen erhalte ich das gleiche Ergebnis: //*[local-name()="head"]
und //*[name()="head"]
. Warum das?
Mit dem XML-Sein
<x:html xmlns:x="http://www.w3.org/1999/xhtml"/>
das Stylesheet
<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>
ausgänge
<local-name>html</local-name>
<name>x:html</name>
Das Ergebnis local-name()
enthält also kein Präfix. Das Ergebnis the name()
enthält möglicherweise ein Präfix.
In Ihrem Beispiel mit einer Standardnamensraumdeklaration ist kein Präfix vorhanden, daher geben name()
und local-name()
dasselbe Ergebnis.