如何在XSLT的XML文档中获取根元素的标记名称?

Mat*_*tty 24 xml xslt xpath

我有兴趣将xml文档中根元素的标记名称分配给xslt变量.例如,如果文档看起来像(减去DTD):

<foo xmlns="http://.....">
    <bar>1</bar>
</foo>
Run Code Online (Sandbox Code Playgroud)

我想将字符串'foo'分配给xslt变量.有没有办法引用它?

谢谢,马特

Dir*_*mar 25

我想你想要检索最外面的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>
Run Code Online (Sandbox Code Playgroud)

请注意,XPath术语略有不同:

树的顶部是根节点(1.0术语)或文档节点(2.0).这就是"/"所指的.它不是一个元素:它是最外层元素的父元素(以及在最外层元素之前或之后的任何注释和处理指令).根节点没有名称.

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


Dim*_*hev 19

使用XPath name()函数.

获取top(而不是root!)元素名称的一个XPath表达式是:

       name(/*)

名字()函数返回节点的完全合格的名字,所以一个元素<bar:foo/>字符串"bar:foo"将被退回.

如果只是名称的本地部分被通缉(没有前缀和":"),那么XPath的local-name()应该使用的功能.

  • @DiegoQueiroz,如果使用 XPath 1 处理器,`/*/name()` 将引发错误,而 name(/*) 与 XPath 1.0 处理器和实现版本高于 1.0 的处理器都可以很好地工作。因此,这个答案的 100% 的读者都会从中受益,而可能 80% 的读者会因未能使用 `/*/name()` 而感到沮丧 (2认同)