8

不要开枪我只是这里的信使,但我有一些看起来像这样的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

谢谢!

4

2 回答 2

22

感谢 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>
于 2013-09-10T01:07:32.083 回答
13

这是一个基本的 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>

对于初学者,模板 match="/" 是您的入口点。apply-templates 是一个 xslt 指令,它告诉 xslt 处理器在上下文中应用节点的模板。在这种情况下,您的根节点“XMLSnippet”。

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

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

于 2013-09-09T21:22:59.630 回答