XSLT - 循环遍历所有子节点

时间:2013-09-09 21:06:50

标签: xml xslt-1.0

不要拍摄我只是这里的信使,但我有一些看起来像这样的xml

<XMLSnippet>
    <data>
        <stuff value="stuff" />
        <stuff value="more stuff" />
        <stuff value="even more stuff" />
        <widget value="you expected stuff didn't you" />
        <stuff value="great, we've got stuff again" />
    </data>
</XMLSnippet>

我想循环遍历所有data子节点并输出以下内容

stuff
more stuff
even more stuff
you expected stuff didn't you
great, we've got stuff again

是否重要我只能使用XSLT 1.0

谢谢!

2 个答案:

答案 0 :(得分:17)

感谢Phil和Alexandre的建议,这是我工作的代码

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:template match="/XMLSnippet">
       <xsl:for-each select="data/*">
          <xsl:value-of select="@value" />
       </xsl:for-each>
   </xsl:template>
</xsl:stylesheet>

答案 1 :(得分:10)

这是一个基本的XSLT问题,所以我假设您对帖子的xsl经验不足。您需要了解xslt如何处理XML文档,这超出了本文的范围。不过,这应该让你开始。请注意,有几种方法可以获得所需的输出,这只是其中之一:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="/">
    <xsl:apply-templates/>
</xsl:template>
<xsl:template match="XMLSnippet">
    <xsl:for-each select="data/stuff">
        <xsl:value-of select="@value"/>
    </xsl:for-each>
</xsl:template>

首先,模板匹配=“/”是您的入口点。 apply-templates是一个xslt指令,它告诉xslt处理器在上下文中应用节点的模板。在这种情况下,您的根节点“XMLSnippet”。

for-each select =“data / stuff”应该是自解释的,以及select =“@ value”的值,除了@用于选择属性。

祝你好运。我建议你阅读这本书XSLT 2.0。一本关于XSLT的好书。