我的XSLT for-each语句出了问题。当我通过XSLT运行XML时,它只会出现列表的第一次迭代,然后停止。它也不会发布值。这是XML代码。
<?xml version="1.0" encoding="UTF-8"?>
<template>
<L>
<Q>Hey</Q>
<Q>There</Q>
<Q>Thank
<R>You</R>
<R>For</R>
<R>The</R>
<R>Help</R>
<R>I</R>
<R>Hope</R>
<R>This</R>
</Q>
<Q> will work!
</Q>
</L>
</template>
这是xslt代码:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/template/L">
<html>
<body>
<ul><xsl:for-each select="Q">
<li><xsl:value-of select="Q"/>
<ul><xsl:for-each select="R">
<li><xsl:value-of select="R"/></li>
</xsl:for-each></ul>
</li>
</xsl:for-each></ul>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
输出应该看起来像一个无序列表,其中嵌入了另一个列表(R标记是嵌入的列表值)。看起来应该是这样的:
这里
答案 0 :(得分:1)
以这种方式试试吗?
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/template/L">
<html>
<body>
<ul>
<xsl:for-each select="Q">
<li>
<xsl:value-of select="text()"/>
<ul>
<xsl:for-each select="R">
<li>
<xsl:value-of select="."/>
</li>
</xsl:for-each>
</ul>
</li>
</xsl:for-each>
</ul>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<强>解释强>:
当您处于<xsl:for-each select="Q">
的上下文中时,指令<xsl:value-of select="Q"/>
不会选择任何内容(除非Q
元素具有另一个Q
元素作为子元素)。同样,<xsl:value-of select="R"/>
在上下文为<xsl:for-each select="R">
时不会选择任何内容。
这是关于自我关闭xsl:for-each
元素的评论的补充。
只有
时,才应创建子列表<Q>
标记有<R>
标记子
我看不出它有什么不同(用HTML格式),但如果你愿意,你可以这样做:
<xsl:template match="/template/L">
<html>
<body>
<ul>
<xsl:for-each select="Q">
<li>
<xsl:value-of select="text()"/>
<xsl:if test="R">
<ul>
<xsl:for-each select="R">
<li>
<xsl:value-of select="."/>
</li>
</xsl:for-each>
</ul>
</xsl:if>
</li>
</xsl:for-each>
</ul>
</body>
</html>
</xsl:template>