webentwicklung-frage-antwort-db.com.de

Was ist der Unterschied zwischen name () und local-name ()?

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?

Bearbeiten

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?

53
troelskn

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.

72
Martin Honnen