XSLT:如何获取所有节点的名称?
问题描述:
我正在寻找一个样式表,它打印每个节点的名称,包括它的值。获取价值很简单,但我不知道如何获取每个节点的名称。这里的基本模板:XSLT:如何获取所有节点的名称?
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" encoding="UTF-8" />
<xsl:template match="/">
<xsl:for-each select="/">
???
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
任何人都可以给我一个提示吗?
谢谢, 罗伯特
答
这完全转变:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:variable name="vQ">"</xsl:variable>
<xsl:template match="*">
<xsl:value-of select=
"concat(name(), ' = ', $vQ, ., $vQ, '
')"/>
<xsl:apply-templates select="*"/>
</xsl:template>
</xsl:stylesheet>
当任何XML文档应用,比如这个:
<nums>
<num>01</num>
<num>02</num>
<num>03</num>
<num>04</num>
<num>05</num>
<num>06</num>
<num>07</num>
<num>08</num>
<num>09</num>
<num>10</num>
</nums>
正好产生想要的,正确的结果:
nums = "01020304050607080910"
num = "01"
num = "02"
num = "03"
num = "04"
num = "05"
num = "06"
num = "07"
num = "08"
num = "09"
num = "10"
答
Name(),“返回当前节点的名称,或在指定的节点集中的第一个节点”
<xsl:value-of select="name()"/>
此外,
local-name() - “返回指定节点集中当前节点或第一个节点的名称 - 不带名称空间前缀”
我想你想这样,
<xsl:value-of select="local-name()"/>
答
我不知道你真正想要的,但如果我把你的要求,从字面上看,它是由满足:
<xsl:for-each select="//node()">
<node name="{name()}" value="{string(.)}"/>
</xsl:for-each>
答
尝试:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:template match="/">
<xsl:for-each select="//*">
<xsl:value-of select="local-name()"/>=<xsl:apply-templates select="current()/text()"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
问得好,+1。请参阅我的答案以获得完整的,非常简短的解决方案:) – 2011-04-04 13:06:14
只有三种节点类型的名称:元素,属性和命名空间节点。 – 2011-04-04 13:38:48