我做了一个xslt
的简单例子。我想在h2
中显示标记名称。如何使用xslt显示标签名称?
这是我的代码:Link
我用过这个
<!--h1><xsl:value-of select="abc/p/name(.)"/></h1-->
它给了我一个错误。为什么呢?
预期产出:
“P”(abc标记内的第一个标记)
答案 0 :(得分:1)
您的尝试:
<xsl:value-of select="abc/p/name(.)"/>
如果您的处理器支持XSLT 2.0,将起作用。
在XSLT 1.0中,您需要执行以下操作:
<xsl:value-of select="name(abc/p)"/>
当然也适用于XSLT 2.0。
答案 1 :(得分:0)
首先:添加<xsl:template match="text()" />
以避免不必要的输出。
然后我会更改第一个模板以匹配您abc
,因为这是有趣的父节点。如果您想要节点的任何子节点,请使用abc/*
。然后,模板将与abs/p
和abc/catalog
匹配。但你只想要第一个孩子,对吗?所以使用abc/*[1]
。这只会匹配abc/p
。现在,您可以执行name(.)
或local-name()
。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="abc/*[1]">
<html>
<body>
<h1><xsl:value-of select="local-name()"/></h1>
</body>
</html>
</xsl:template>
<xsl:template match="text()" />
</xsl:stylesheet>
您的XML文件
<abc>
<p test='ravi'>test123</p>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
</catalog>
</abc>