我正在寻找一个样式表,它打印每个节点的名称,包括它的值。获取价值很容易,但我不知道如何获得每个节点的名称。这是基本模板:
<?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>
有人能给我一个提示吗?
谢谢, 罗伯特
答案 0 :(得分:3)
我不知道你真正想要的是什么,但如果我从字面上理解你的要求,那就是:
<xsl:for-each select="//node()">
<node name="{name()}" value="{string(.)}"/>
</xsl:for-each>
答案 1 :(得分:3)
完全转型:
<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"
答案 2 :(得分:0)
Name(),“返回当前节点的名称或指定节点集中的第一个节点”
<xsl:value-of select="name()"/>
此外,
local-name() - “返回当前节点的名称或指定节点集中的第一个节点 - 没有名称空间前缀”
我认为你想要这个,
<xsl:value-of select="local-name()"/>
答案 3 :(得分:0)
尝试:
<?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>