2009-02-25 78 views
90

在XSLT存在是否有XSLT名称元素?

<xsl:value-of select="expression"/> 

得到一个元素的值,但有一些选择的元素的标签名称?

在这样的情况:

<person> 
    <!-- required stuff --> 
    <name>Robert</name> 
    <!-- optional stuff, free form for future extension. 
     Using XMLSchema's xsd:any --> 
    <profession>programmer</profession> 
    <hobby>photography</hobby> 
</person> 

<xsl:for-each select="person"> 
    <xsl:tag-of select="."/> : <xsl:value-of select="."/> 
</xsl:for-each> 

为了得到输出是这样的:

name : Robert 
profession : programmer 
hobby : photography 

当然上面的XSLT不能编译,因为

<xsl:tag-of select="expression"/> 

不存在。但是,这怎么可能呢?

+0

这个问题最相关的标签是XPath。这两个函数都是XPath标准函数,可以在任何托管语言(C#,XSLT,XQuery,...)的上下文中用于XPath表达式中。请重新标记 – 2009-02-25 17:09:27

+0

本文内容:“在XSLT中,有 < xsd:value-of select =“表达式”/>“ - 包含错误。 XSLT指令通常使用的前缀是“xsl”。通常当使用XML Schema时,我们使用前缀“xsd”或“xs”。请改正。 – 2009-02-25 20:17:30

+0

谢谢,那些需要修复。 – 2009-02-26 00:30:13

回答

139

这会给你当前元素的名称(标签名)

<xsl:value-of select ="name(.)"/> 

OP-编辑:这也将这样的伎俩:

<xsl:value-of select ="local-name()"/> 
+11

local-name是你想要的东西中的9倍 – annakata 2009-02-25 09:22:15

6
<xsl:value-of select="name(.)" /> : <xsl:value-of select="."/> 
13
<xsl:for-each select="person"> 
    <xsl:for-each select="*"> 
    <xsl:value-of select="local-name()"/> : <xsl:value-of select="."/> 
    </xsl:for-each> 
</xsl:for-each> 
93

没有人指出函数的语义的细微差别和local-name()

  • name(someNode)返回节点的完整 名称,以及包括 前缀和结肠的情况下,该节点 是元素还是属性。
  • local-name(someNode)仅返回 节点的本地名称,以及 不包括前缀和结肠 万一节点是一个元素或属性 。

因此,在名称可能属于两个不同名称空间的情况下,必须使用name()函数才能区分这些名称。

而且,顺便说一句,可以不带任何参数同时指定功能:

name()name(.)

local-name()的缩写为local-name(.)

的缩写

最后,请记住,不仅元素和属性有名称,这两个函数也可以在PI上使用,并在这些它们是相同的)。

7

对于那些有兴趣,有没有:

<xsl:tag-of select="."/> 

转到但是你可以重新创建标签/元素:

<xsl:element name="{local-name()}"> 
    <xsl:value-of select="substring(.,1,3)"/> 
</xsl:element> 

这是一个XSLT模板有用的,例如手柄为许多不同的元素格式化数据值。如果您不知道正在处理的元素的名称,并且仍然可以输出相同的元素,并根据需要修改该值。

相关问题