我是xslt的新手。我正在将XML文件转换为平面文件。但是子节点值在每个节点组下一起显示。如何分别显示它们?
XML:
<list>
<group name="group1">
<item value="item1" />
<item value="item11" />
</group>
<group name="group2">
<item value="item2" />
<item value="item22" />
<item value="item222" />
</group>
</list>
XSLT:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ms="urn:schemas-microsoft-com:xslt">
<xsl:template match="/">
<xsl:for-each select="//list1/group">
<xsl:text>group name</xsl:text>
<xsl:value-of select="@name"/>
<!--item -->
<xsl:for-each select="//list1/group/item">
<xsl:text>item value</xsl:text>
<xsl:value-of select="@value" />
</xsl:for-each>
</xsl:for-each>
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
输出:
group name group1
item value item1
item value item11
item value item2
item value item22
item value item22
group name group2
item value item1
item value item11
item value item2
item value item22
item value item22
预期输出:
group name group1
item value item1
item value item11
group name group2
item value item2
item value item22
item value item222
答案 0 :(得分:1)
您发布的代码的主要问题在这里:
<xsl:for-each select="//list1/group/item">
这将始终选择整个XML文档中的所有item
节点,从根节点开始,而忽略当前上下文。
更早的时候,您这样做:
<xsl:for-each select="//list1/group">
您被置于group
的上下文中。从此处开始,要处理作为当前item
的子元素的group
元素,您应该简单地做:
<xsl:for-each select="item">
答案 1 :(得分:0)
最好使用xsl
匹配功能,而不要使用“ for-each
”
可能的解决方案(选择所有item
,然后输出父级的name
和item
的{{1}}):
value
答案 2 :(得分:0)
Following code check:-
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="group">
<xsl:text>group name</xsl:text>
<xsl:value-of select="@name"/>
<xsl:text>item value</xsl:text>
<xsl:value-of select="item/@value" />
</xsl:template>