用于从XML模式中挑选和分组元素的XSLT

时间:2017-03-28 16:24:52

标签: xml xslt xslt-1.0 xslt-2.0 xslt-grouping

我有一个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> and <value>分组的每个节点<Row>中选择元素<id>。预期的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>'

1 个答案:

答案 0 :(得分:0)

这是XSLT 2.0中的标准分组模式(我假设您使用的是2.0,因为您没有指定)。

https://www.xml.com/pub/a/2003/11/05/tr.html

检查此链接,它将帮助您调整算法以实现您想要的效果。

如果您可以共享XSLT代码,那么我们可以为您提供更多帮助。

祝你好运