在XSLT中有
<xsl:value-of select="expression"/>
Run Code Online (Sandbox Code Playgroud)
获取元素的值,但是有什么东西可以选择元素的标记名吗?
在这种情况下:
<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>
Run Code Online (Sandbox Code Playgroud)
要获得这样的输出:
Run Code Online (Sandbox Code Playgroud)name : Robert profession : programmer hobby : photography
当然上面的XSLT不会编译因为
<xsl:tag-of select="expression"/>
Run Code Online (Sandbox Code Playgroud)
不存在.但是怎么办呢?
Ras*_*dit 151
这将为您提供当前元素名称(标记名称)
<xsl:value-of select ="name(.)"/>
Run Code Online (Sandbox Code Playgroud)
OP-Edit:这也可以解决问题:
<xsl:value-of select ="local-name()"/>
Run Code Online (Sandbox Code Playgroud)
Dim*_*hev 100
没有人确实指出了函数name()和语义的细微差别local-name().
name(someNode) 返回节点的全名,并包含前缀和冒号,以防节点是元素或属性.local-name(someNode) 仅返回节点的本地名称,并且如果节点是元素或属性,则不包括前缀和冒号.因此,在名称可能属于两个不同名称空间的情况下,必须使用该name()函数才能仍然区分这些名称.
而且,顺便说一下,可以在没有任何参数的情况下指定两个函数:
name() 是.的缩写 name(.)
local-name() 是.的缩写 local-name(.)
最后,请记住,不仅元素和属性具有名称,这两个函数也可以用于PI,并且它们是相同的).
Ray*_* Lu 14
<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>
Run Code Online (Sandbox Code Playgroud)
对于那些感兴趣的人,没有:
<xsl:tag-of select="."/>
Run Code Online (Sandbox Code Playgroud)
但是,您可以通过以下方式重新创建标记/元素:
<xsl:element name="{local-name()}">
<xsl:value-of select="substring(.,1,3)"/>
</xsl:element>
Run Code Online (Sandbox Code Playgroud)
这在xslt模板中很有用,例如,它处理许多不同元素的格式化数据值.如果您不知道正在处理的元素的名称,您仍然可以输出相同的元素,并在需要时修改该值.
<xsl:value-of select="name(.)" /> : <xsl:value-of select="."/>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
139637 次 |
| 最近记录: |