Как получить имя тега корневого элемента в документе XML с XSLT? - PullRequest
23 голосов
/ 15 декабря 2008

Мне интересно присвоить имя тега корневого элемента в документе xml переменной xslt. Например, если документ выглядел так (без DTD):

<foo xmlns="http://.....">
    <bar>1</bar>
</foo>

и я хотел присвоить строку 'foo' переменной xslt. Есть ли способ сослаться на это?

Спасибо, Мэтт

Ответы [ 4 ]

25 голосов
/ 15 декабря 2008

Я думаю, что вы хотите получить имя самого внешнего элемента XML. Это можно сделать как в следующем примере XSL:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:variable name="outermostElementName" select="name(/*)" />

  <xsl:template match="/">
    <xsl:value-of select="$outermostElementName"/>
  </xsl:template>
</xsl:stylesheet>

Обратите внимание, что в терминологии XPath есть небольшая разница:

Верх дерева является корневым узлом (Терминология 1.0) или узел документа (2.0). Это то, что относится к «/». Это не элемент: это родитель самого внешнего элемента (и любой комментарии и инструкции по обработке которые предшествуют или следуют за внешним элемент). Корневой узел не имеет имени.

См. http://www.dpawson.co.uk/xsl/sect2/root.html#d9799e301

19 голосов
/ 15 декабря 2008

Используйте функцию XPath name().

Одно выражение XPath для получения имени верхнего (не корневого!) Элемента:

name(/*)

Функция name () возвращает полное имя узла, поэтому для элемента <bar:foo/> будет возвращена строка "bar: foo".

Если нужна только локальная часть имени (без префикса и ":"), то должна использоваться функция XPath local-name().

2 голосов
/ 15 декабря 2008

Разобрался. Имя функции () с параметром * вернет foo.

0 голосов
/ 15 декабря 2008

вы хотите local-name ()

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