Есть ли XSLT-имя элемента?
в 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"/>
не существует. Но как это сделать?
5 ответов:
это даст вам текущее имя элемента (имя тега)
<xsl:value-of select ="name(.)"/>
OP-Edit: это также будет делать трюк:
<xsl:value-of select ="local-name()"/>
никто не указал на тонкую разницу в семантике функций
name()
иlocal-name()
.
name(someNode)
возвращает полный имя узла, и это включает в себя префикс и двоеточие в случае, если узел является элементом или атрибутом.local-name(someNode)
возвращает только локальное имя узла, и что не включает в себя префикс и толстой кишки в случае, если узел является элементом или один атрибут.поэтому в ситуациях, когда имя может принадлежать двум разным пространствам имен, Необходимо использовать
name()
функция для того, чтобы эти имена все еще различались.и, кстати, можно указать обе функции без каких-либо аргументов:
name()
- это аббревиатураname(.)
local-name()
- это аббревиатураlocal-name(.)
наконец-то, помните, что не только элементы и атрибуты имеют имена, эти две функции также могут быть использованы на PIs, и на них они идентичны).
<xsl:for-each select="person"> <xsl:for-each select="*"> <xsl:value-of select="local-name()"/> : <xsl:value-of select="."/> </xsl:for-each> </xsl:for-each>
для тех, кто заинтересован, нет:
<xsl:tag-of select="."/>
однако, вы можете повторно создать тег/элемент путем идти:
<xsl:element name="{local-name()}"> <xsl:value-of select="substring(.,1,3)"/> </xsl:element>
это полезно в шаблоне xslt, который, например, обрабатывает значения данных форматирования для множества различных элементов. Когда вы не знаете имя элемента, над которым работаете, и вы все равно можете вывести тот же элемент и изменить значение, если это необходимо.