【发布时间】:2016-05-19 13:30:24
【问题描述】:
我们在 xslt 中遇到了一个问题,我们正在尝试执行嵌套的 for-each,但它不读取内部循环。这是我们尝试过的代码:
XML 文件:
<Rowsets>
<Rowset>
<Row>
<name>BRH</name>
<desc>---</desc>
<values>
<value>
<from>01/18/2016 16:46:50</from>
<to>01/18/2016 16:46:53</to>
<label>MPA000000032</label>
</value>
<value>
<from>01/04/2016 19:51:57</from>
<to>01/13/2016 19:52:00</to>
<label>MPA000000014</label>
</value>
</values>
</Row>
</Rowset>
</Rowsets>
xslt 文件:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" indent="yes" />
<xsl:template match="/Rowsets">
<xsl:for-each select="Rowset/Row">
{"name":"<xsl:value-of select="name" />",
"desc":" (<xsl:value-of select="desc" />)",
"values" : [ { <xsl:for-each select="Row/values/value">
"from" : " /Date(<xsl:value-of select="from" />)/",
"to" : " /Date(<xsl:value-of select="to" />)/",
"label" : "<xsl:value-of select="label" />"
}</xsl:for-each><xsl:if test="./following-sibling::values">,</xsl:if></xsl:for-each>]
} <xsl:if test="./following-sibling::Row">,</xsl:if></xsl:for-each>
</xsl:template>
</xsl:stylesheet>
预期的 JSON:
{
"Rowsets": {
"Rowset": {
"Row": [
{
"name": "BRH",
"desc": "---",
"values": [
{
"from": "01/18/2016 16:46:50",
"to": "01/18/2016 16:46:53",
"label": "MPA000000032"
},
{
"from": "01/04/2016 19:51:57",
"to": "01/13/2016 19:52:00",
"label": "MPA000000014"
},
{
"from": "01/05/2016 13:24:46",
"to": "01/17/2016 13:24:52",
"label": "MPA000000029"
},
{
"from": "01/11/2016 16:29:28",
"to": "01/20/2016 16:29:30",
"label": "MPA000000008"
},
{
"from": "01/18/2016 12:05:21",
"to": "01/27/2016 12:05:26",
"label": "MPA000000036"
}
]
},
{
"name": "ROW-Q103-G2",
"desc": "Salbatica 1",
"values": {
"from": "07/29/2015 09:00:00",
"to": "07/30/2015 09:00:00",
"label": "P0007"
}
}
]
}
}
}
【问题讨论】:
-
在您的第一个
for-each中,当前节点是<Row>元素。由于您在嵌套的for-each(Row/values/value) 中再次指定它,因此它仅在您的<Row>元素也有<Row>元素作为子元素时才有效,但事实并非如此。values/value应该足够了。 -
@FredericHamidi,这应该是一个答案而不是评论。