Как получить имя тега корневого элемента в документе XML w/XSLT?
Мне интересно назначить имя тега корневого элемента в XML-документе переменной xslt. Например, если документ выглядел (минус DTD):
<foo xmlns="http://.....">
<bar>1</bar>
</foo>
и я хотел назначить строку 'foo' переменной xslt. Есть ли способ ссылаться на это?
Спасибо, Мэтт
Ответы
Ответ 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.
Ответ 4
вы хотите local-name()