【发布时间】:2017-08-21 20:15:46
【问题描述】:
我有一个 XML 模式,我需要在其中过滤每个节点的特定元素,并将这些过滤后的元素分组为所需的 XML 格式。
XML 架构如下-
<Roots>
<Root>
<Result>
<Row index="1">
<id>001</id>
<value>Test Value</value>
</Row>
<Row index="2">
<id>001</id>
<value>Test Value1</value>
</Row>
<Row index="3">
<id>001</id>
<value>Test Value2</value>
</Row>
<Row index="4">
<id>002</id>
<value>Test Value3</value>
</Row>
<Row index="5">
<id>002</id>
<value>Test Value4</value>
</Row>
<Row index="6">
<id>003</id>
<value>Test Value5</value>
</Row>
<Row index="7">
<id>003</id>
<value>Test Value6</value>
</Row>
<Row index="8">
<id>003</id>
<value>Test Value7</value>
</Row>
</Result>
</Root>
</Root>
我想从 <id> 分组的每个节点 <Row> 中选择元素 <id> and <value>。预期的 XML 架构如下-
<html>
<body>
<table border="1">
<tr>
<td>001</td>
<td>Test Value</td>
<td>Test Value1</td>
<td>Test Value2</td>
</tr>
<tr>
<td>002</td>
<td>Test Value3</td>
<td>Test Value4</td>
</tr>
<tr>
<td>003</td>
<td>Test Value5</td>
<td>Test Value6</td>
<td>Test Value7</td>
</tr>
</table>
</body>
</html>
你能帮我看看上面的格式吗? 工作 XSLT 如下-
'<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Roots/Root/Result">
<html>
<body>
<table border="1">
<xsl:for-each-group select="Row" group-by="id">
<tr>
<td><xsl:value-of select="id"/></td>
<xsl:for-each select="current-group()">
<td><xsl:value-of select="value"/></td>
</xsl:for-each>
</tr>
</xsl:for-each-group>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>'
【问题讨论】:
-
您的 XSLT 在哪里?你试过什么?你看的是at this SO question 还是this other SO question?
-
对于有关 XSLT 分组的问题,您需要指定 XSLT 1.0 或 2.0,因为答案会非常不同。而且您需要说明您解决问题的程度以及卡在哪里 - 当您遇到困难时,我们会在这里为您提供帮助,而不是根据第一原则为您编写代码。
-
另外,“XML 模式”的通常含义是 XSD 模式文档:您的输入没有任何远程模式。
-
嗨 @MichaelKay 我已经添加了我的 XSLT 脚本。
-
好吧,首先,您有两个模板都带有 match="/" 并且没有明确的优先级,而 XSLT 1.0 让它完全由实现定义在这种情况下发生的事情。
标签: xml xslt xslt-1.0 xslt-2.0 xslt-grouping