В чем разница между name () и local-name ()? - PullRequest
53 голосов
/ 17 марта 2010

Я не очень понимаю разницу между функциями XPath name и local-name.

Не могли бы вы привести пример ситуации, в которой они будут различаться?

Редактировать

Учитывая этот пример:

<?xml version="1.0" ?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head></head>
</html>

Я получаю одинаковый результат с этими двумя запросами: //*[local-name()="head"] и //*[name()="head"]. Почему это?

1 Ответ

72 голосов
/ 17 марта 2010

С 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() без префикса, результат the name() может содержать префикс.

В вашем примере с объявлением пространства имен по умолчанию префикс отсутствует, поэтому name() и local-name() дают одинаковый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...