【问题标题】:XSLT for picking and grouping elements from XML schemaXSLT 用于从 XML 模式中挑选和分组元素
【发布时间】: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>

我想从 &lt;id&gt; 分组的每个节点 &lt;Row&gt; 中选择元素 &lt;id&gt; and &lt;value&gt;。预期的 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


【解决方案1】:

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

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

查看此链接,它将极大地帮助您塑造算法以做您想做的事情。

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

祝你好运

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多