我试图遍历一个有20个元素的xml
<?xml version="1.0" encoding="UTF-8"?>
<container>
<products>one</products>
<products>two</products>
<products>three</products>
<products>four</products>
<products>five</products>
<products>six</products>
<products>seven</products>
<products>eight</products>
...
</container>
我试图通过在每4个元素之后插入换行符来遍历元素
所需的输出是:
one two three four
five six seven eight
...
您能否就如何实现这一点给出一些指示 可以使用应用模板完成吗?
答案 0 :(得分:1)
假设您需要文本输出,请尝试以下操作:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:template match="/">
<xsl:for-each select="container/products">
<xsl:value-of select="." />
<xsl:choose>
<xsl:when test="position() mod 4">
<xsl:text> </xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text> </xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:1)
您可以使用模式匹配在XSLT中更自然地实现所需的结果而无需循环。
此XSLT转换:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:strip-space elements="*"/>
<xsl:output method="text"/>
<xsl:template match="products">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
</xsl:template>
<xsl:template match="products[position() mod 4 = 0]">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>
应用于此输入XML:
<?xml version="1.0" encoding="UTF-8"?>
<container>
<products>one</products>
<products>two</products>
<products>three</products>
<products>four</products>
<products>five</products>
<products>six</products>
<products>seven</products>
<products>eight</products>
</container>
将产生所需的输出:
one two three four
five six seven eight
使用模式匹配而不是循环。