如何在带有XSLT的XML文档中获取根元素的标记名?
我感兴趣的是将xml文档中根元素的标记名分配给xslt变量。例如,如果文档看起来像(减去DTD):如何在带有XSLT的XML文档中获取根元素的标记名?,xml,xslt,xpath,Xml,Xslt,Xpath,我感兴趣的是将xml文档中根元素的标记名分配给xslt变量。例如,如果文档看起来像(减去DTD): 1. 我想将字符串'foo'分配给xslt变量。有什么方法可以引用它吗 谢谢,马特把它弄明白了。给定参数*的函数名()将返回foo。我认为您希望检索最外层XML元素的名称。这可以像下面的XSL示例中那样完成: <?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl="htt
1.
我想将字符串'foo'分配给xslt变量。有什么方法可以引用它吗
谢谢,马特把它弄明白了。给定参数*的函数名()将返回foo。我认为您希望检索最外层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术语略有不同:
树的顶部是根节点
(1.0术语)或文档节点
(2.0). 这就是“/”所指的。
它不是元素,而是父元素
最外层元件(以及任何
评论和处理说明
在最外层之前或之后的
元素)。根节点没有名称
请参见您想要使用XPath函数的
获取top(而非root!)元素名称的一个XPath表达式是:
名称(/*)
函数的作用是:返回节点的完全限定名,因此对于元素
,将返回字符串“bar:foo”
如果只需要名称的本地部分(无前缀和“:”),则应使用XPath函数。@annakata:name()和local-name()不同。OP显然需要name()。他没有说他希望名称去掉任何名称空间前缀。公平地说,我的意思是“这将做你想做的”而不是“只有这个…”而且OP中也没有说他想要名称空间。我不知道你的情况,但根据我的经验,我90%以上的时间都对当地的名字感兴趣。名称空间是人们讨厌XSLT的原因之一。另外,如果使用XPath 1处理器,
/*/name()
@DiegoQueiroz,/*/name()
将引发错误,而name(/*)可以很好地与XPath 1.0处理器以及实现高于1.0版本的处理器配合使用。因此,本答案的100%读者将从中受益,而80%的读者可能会因为未能使用/*/name()
这一点而感到沮丧,但有时您并不追求兼容性。我使用的处理器强制我指定要循环的基本XPath(例如/*),然后将剩余的XPath映射到字段。这样,我提出的解决方案很方便。但很高兴知道它与旧版本不兼容。
<?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>