【问题标题】:How to get tag name in XSLT? [duplicate]如何在 XSLT 中获取标签名称? [复制]
【发布时间】:2017-04-23 05:53:48
【问题描述】:

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

这是我的代码:Link

我用过这个

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

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

预期输出:

"P"(abc 标签内的第一个标签)

【问题讨论】:

  • 请在问题本身中发布您的代码,而不是在外部链接中。

标签: jquery xml xslt xslt-1.0 xslt-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。

【讨论】:

【解决方案2】:

首先:添加&lt;xsl:template match="text()" /&gt; 以避免不需要的输出。

然后我会更改第一个模板以匹配您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

【讨论】:

  • 这个&lt;xsl:template match="text()" /&gt; 的用途是什么
  • 为什么会出现不需要的错误?没有这行&lt;xsl:template match="text()" /&gt;
  • 模板匹配所有之前无法匹配的内容。它是一种 default 在 switch-case 中的一种。
猜你喜欢
  • 2014-07-12
  • 2011-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-14
  • 2019-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多