XSLT - 循环遍历所有子节点

dsc*_*scl 6 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>
Run Code Online (Sandbox Code Playgroud)

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

stuff
more stuff
even more stuff
you expected stuff didn't you
great, we've got stuff again
Run Code Online (Sandbox Code Playgroud)

如果重要,我只能使用XSLT 1.0

谢谢!

dsc*_*scl 19

感谢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>
Run Code Online (Sandbox Code Playgroud)


Phi*_*yNJ 11

这是一个基本的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>
Run Code Online (Sandbox Code Playgroud)

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

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

祝好运.我建议您阅读本书XSLT 2.0.一本关于XSLT的好书.

  • 你是对的,我的经验有限.我的问题还在于需要显示"小部件"值.如果我是正确的,你的代码只会显示'stuff'节点. (3认同)
  • 为什么此答案标记为正确?似乎在循环结构中遗漏了“ widget”元素将意味着未解决问题的要求。 (3认同)