2016-12-08 34 views
0

我做了一个简单的例子xslt。我想在h2中显示标签名称。如何使用xslt显示标签名称?如何在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,当然啦。

+0

好的谢谢...! – user944513

+0

能否请你告诉我为什么通话功能不起作用https://plnkr.co/edit/TN1BN5Yao5Z63RDcBGlN?p=preview – user944513

+0

我建议你发布一个单独的问题。提示:'xsl:call-template'必须在模板中匹配输入内容。 –

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

+0

这个' ' – user944513

+0

为什么我得到不需要的错误?没有这行''' – user944513

+0

这个模板匹配一切之前无法比拟的。这是交换机中的一种“默认”。 – Marcus