【发布时间】:2014-10-10 01:42:04
【问题描述】:
我很难用 xsl 和 xml 做一个折叠的 for-each。 这是我的 xml 文件:
<a>
<b>
<c name="namec1">
<d name="named1">value1</d>
<d name="named2">value2</d>
<d name="named3">value3</d>
<d name="named4">value4</d>
</c>
<c name="namec1">
<d name="named1">value5</d>
<d name="named2">value6</d>
<d name="named3">value7</d>
<d name="named4">value8</d>
</c>
<c name="namec1">
<d name="named1">value9</d>
<d name="named2">value10</d>
<d name="named3">value11</d>
<d name="named4">value12</d>
</c>
</b>
</a>
这就是我想要的:
namec: [namec1, namec2, namec3]
named: [value1, value5, value9]
named: [value2, value6, value10]
named: [value3, value7, value11]
named: [value4, value8, value12]
这是我的 xsl 代码:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:variable name="index" select="." />
<html>
<body>
namec: [
<xsl:for-each select="a/b">
<xsl:choose>
<xsl:when test="position()=1">
<xsl:value-of select='c/@name'/>
</xsl:when>
<xsl:otherwise>
, <xsl:value-of select='d/@name'/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
]
<xsl:for-each select="a/b">
<xsl:if test="position()=1">
<xsl:for-each select="c/d">
named: <xsl:value-of select="@name" />,
data: [
<xsl:for-each select="$index/a/b/c">
<xsl:value-of select="d" />,
</xsl:for-each>
]
</xsl:for-each>
</xsl:if>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
第一个 for-each 没问题 但我真的不明白为什么第二个崩溃的 for-each 不起作用 我什么都试过了,但我是新手…… 有可能吗? 提前致谢!
【问题讨论】:
-
1. 每个
c组是否有相同的d成员? 2. 你确定这是你想要的输出格式吗?你有周围的 html 标签;这不会以您在 HTML 中显示的方式显示。 -
每个c成员的d名称相同,但值不同。不用担心 html 标签,在我的情况下它们无关紧要。这里的困难是我想要一个看起来像这样的列表:namedn: [values of all namedn] for n = {1,...,n}
-
我只是在问这张桌子是否“常规”。如果是,那么这是一个转置的问题 - 看看你是否可以为你做这个工作:stackoverflow.com/questions/4410084/…
-
很好的答案。我正在寻找一种方法来做到这一点!我告诉你我是否设法在我的情况下应用它。应该不是问题