В XSLT есть
<xsl:value-of select="expression"/>
чтобы получить значение элемента, но есть ли что-то для выбора имени тега элемента?
В такой ситуации:
<person>
<!-- required stuff -->
<name>Robert</name>
<!-- optional stuff, free form for future extension.
Using XMLSchema's xsd:any -->
<profession>programmer</profession>
<hobby>photography</hobby>
</person>
<xsl:for-each select="person">
<xsl:tag-of select="."/> : <xsl:value-of select="."/>
</xsl:for-each>
Чтобы получить такой вывод:
name : Robert profession : programmer hobby : photography
Конечно, приведенный выше XSLT не компилируется, потому что
<xsl:tag-of select="expression"/>
не существует. Но как это можно было сделать?
Ответы:
Это даст вам текущее имя элемента (имя тега)
OP-Edit: Это тоже поможет:
источник
Никто не указал на тонкую разницу в семантике функций
name()
иlocal-name()
.name(someNode)
возвращает полное имя узла, включая префикс и двоеточие, если узел является элементом или атрибутом.local-name(someNode)
возвращает только локальное имя узла и не включает префикс и двоеточие в случае, если узел является элементом или атрибутом.Следовательно, в ситуациях, когда имя может принадлежать двум разным пространствам имен, необходимо использовать
name()
функцию, чтобы эти имена по-прежнему различались.И, кстати, можно указать обе функции без аргументов :
name()
это сокращение отname(.)
local-name()
это сокращение отlocal-name(.)
Наконец , помните, что не только элементы и атрибуты имеют имена, эти две функции также могут использоваться в PI, и в них они идентичны).
источник
источник
Для желающих нет:
Однако вы можете воссоздать тег / элемент, выполнив следующие действия:
Это полезно в шаблоне xslt, который, например, обрабатывает значения данных форматирования для множества различных элементов. Когда вы не знаете имя элемента, над которым работаете, но вы все еще можете вывести тот же элемент и при необходимости изменить значение.
источник
источник