Подтвердить что ты не робот

Как получить имя тега корневого элемента в документе XML w/XSLT?

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

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

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

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

4b9b3361

Ответ 1

Я думаю, вы хотите получить имя внешнего 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:

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

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

Ответ 2

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

Одно выражение XPath для получения имени элемента top (не root!):

        name(/*)

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

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

Ответ 3

Выяснил это. Имя функции(), заданное параметром *, вернет foo.