当我得到在同一个父元素中多次使用的元素的值时,我想获得同名的每个元素,而不仅仅是第一个元素。
E.g。 -
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<artist>Bob Dylan2</artist>
<artist>Bob Dylan3</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
</catalog>
现在,当我通过每张CD并使用value-of输出艺术家名称时,我只得到第一个元素(有点可以理解)。但是如何在for-each循环中获取同名的所有元素?我试着做一个内部for-each循环但是没有用。
我对XML及其工作原理非常陌生,所以请放轻松我......: - (
答案 0 :(得分:7)
<xsl:template match="/">
<xsl:for-each select="catalog">
<!-- Print Other Stuff, if required -->
<xsl:for-each select="cd/artist">
<xsl:value-of select="text()"/><br/>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
Bob Dylan
Bob Dylan2
Bob Dylan3
答案 1 :(得分:3)
现在当我
for-each
通过每张CD并使用value-of
输出时 艺术家的名字,我只得到第一个元素(有点可以理解)。 但是如何在for-each
内获得同名的所有元素 环?我试过做一个内部for-each
循环但是没有用。
我对任何XSLT新手的建议 使用<xsl:for-each>
- 尽可能。我知道只有一个用例需要<xsl:for-each>
,这是一个非常罕见的情况(当需要显式更改当前文档以便key()
函数将使用索引时为此特定文件而建。)。
这可能是最简单的解决方案之一(没有<xsl:for-each>
且没有嵌套):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="artist">
<xsl:value-of select="concat(., '
')"/>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
将此转换应用于提供的XML文档:
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<artist>Bob Dylan2</artist>
<artist>Bob Dylan3</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
</catalog>
产生了想要的正确结果:
Bob Dylan
Bob Dylan2
Bob Dylan3
答案 2 :(得分:2)
<xsl:template match="catalog/cd/artist">
<xsl:value-of select="." />
</xsl:template>
答案 3 :(得分:0)
没有理由内循环不起作用。您使用什么XSLT语法来执行此操作?听起来你的xpaths中有一个错误,因为你所描述的应该可以正常工作。
答案 4 :(得分:0)
你的XPATH可能错了:
使用foreach在CD元素中:
<xsl:template match="/">
<xsl:for-each select="//cd">
<xsl:for-each select="artist">
<xsl:message terminate="no">
<xsl:value-of select="."/>
</xsl:message>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
打印所有艺术家..
答案 5 :(得分:0)
text()
xpath语法选择当前指定节点的任何文本子节点。
有些人并不特别喜欢这个网站,但为了开始,可以指出正确的方向 - click here