如何在XSLT中获取标签名称?

时间:2016-12-08 04:35:09

标签: jquery xml xslt xslt-1.0 xslt-2.0

我做了一个xslt的简单例子。我想在h2中显示标记名称。如何使用xslt显示标签名称?

这是我的代码:Link

我用过这个

<!--h1><xsl:value-of select="abc/p/name(.)"/></h1-->

它给了我一个错误。为什么呢?

预期产出:

“P”(abc标记内的第一个标记)

2 个答案:

答案 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/pabc/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>

阅读本文:https://stackoverflow.com/a/585290/5413817