Я действительно не понимаю различия между функциями XPath name
и local-name
.
Вы могли дать пример ситуации, где они отличались бы?
Учитывая этот пример:
Я получаю тот же результат с этими двумя запросами: //*[local-name()="head"]
и //*[name()="head"]
. Почему это?
Поскольку XML является
<x:html xmlns:x="http://www.w3.org/1999/xhtml"/>
, таблица стилей
<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>
выводит
<local-name>html</local-name>
<name>x:html</name>
Таким образом, результат local-name ()
не имеет префикса, результат name ()
может включить префикс.
В вашем примере с объявлением пространства имен по умолчанию префикс отсутствует, поэтому name ()
и local-name ()
дают тот же результат.