有没有XSLT名称的元素?
在XSLT中有
<xsl:value-of select="expression"/>
得到一个元素的值,但有什么要select元素的标签名称?
在这样的情况下:
<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"/>
不存在。 但是,这怎么可能呢?
这会给你当前的元素名称(标签名称)
<xsl:value-of select ="name(.)"/>
操作编辑:这也将诀窍:
<xsl:value-of select ="local-name()"/>
没有人指出函数name()
和local-name()
的语义细微差别。
-
name(someNode)
返回节点的全名,并且在节点是元素或属性的情况下包括前缀和冒号。 -
local-name(someNode)
只返回节点的本地名称,如果节点是元素或属性,则不包含前缀和冒号。
因此,在名称可能属于两个不同名称空间的情况下,必须使用name()
函数才能区分这些名称。
而且,顺便说一句,可以指定两个函数没有任何参数 :
name()
是name(.)
的缩写
local-name()
是local-name(.)
的缩写
最后 ,请记住,不仅元素和属性具有名称,这两个函数也可以在PI上使用,并且它们是相同的)。
<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>
<xsl:value-of select="name(.)" /> : <xsl:value-of select="."/>
对于那些感兴趣的,没有:
<xsl:tag-of select="."/>
不过,您可以通过以下方式重新创build标签/元素:
<xsl:element name="{local-name()}"> <xsl:value-of select="substring(.,1,3)"/> </xsl:element>
这在xslt模板中很有用,例如处理大量不同元素的格式化数据值。 如果您不知道正在处理的元素的名称,则仍然可以输出相同的元素,并在需要时修改该值。