【问题标题】:XSL - how to add all values with the same attribute?XSL - 如何添加具有相同属性的所有值?
【发布时间】:2018-01-20 22:09:00
【问题描述】:

所以我有这个 XML 代码,我需要在其中添加具有相同 ID 的所有值。从 Identity 属性中获取 ID,而不是将其与值 10 或其他值进行比较。

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="random.xsl"?>
<RootName>
    <RandomRootNode>
        <RandomNode>
            <Identity sid="10">abc</Identity>
            <Identity sid="20">def</Identity>
            <Identity sid="30">ghi</Identity>
        </RandomNode>
    </RandomRootNode>
    <SeriesRootNode>
        <Series>
            <Ran dustId="10">1</Ran>
            <Ran dustId="20">2</Ran>
            <Ran dustId="30">3</Ran>
        </Series>
        <Series>
            <Ran dustId="10">4</Ran>
            <Ran dustId="20">5</Ran>
            <Ran dustId="30">6</Ran>
        </Series>
        <Series>
            <Ran dustId="10">7</Ran>
            <Ran dustId="20">8</Ran>
            <Ran dustId="30">9</Ran>
        </Series>
    </SeriesRootNode>
</RootName>

所以为此我需要显示类似这样的内容

| ID | name | total |
|----|------|-------|
| 10 | abc  | 12    |
| 20 | def  | 15    |
| 30 | ghi  | 18    |

我试过这样做,但我只能得到所有这些的总和。所以我得到了

| ID | name | total |
|----|------|-------|
| 10 | abc  | 45    |
| 20 | def  | 45    |
| 30 | ghi  | 45    |

我该怎么做?
我对编写 XSLT 还很陌生。

【问题讨论】:

  • 您可以编辑您的问题以显示您尝试过的 XSLT 吗?谢谢。

标签: xml xslt xslt-1.0 transformation


【解决方案1】:

这是一个有效的random.xsl
它的输出在浏览器中是符合要求的。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html" version="4.0" encoding="UTF-8" indent="yes"/>

    <!-- Demo template -->
    <xsl:template match="/RootName/RandomRootNode/RandomNode">
      <table border="1">
        <th width="50">ID</th><th>name</th><th>total</th>
        <xsl:for-each select="Identity">
          <xsl:variable name="curID" select="@sid" />
          <tr>
            <td align="center"><xsl:value-of select="$curID" /></td>
            <td align="center"><xsl:value-of select="text()" /></td>
            <td align="center"><xsl:value-of select="sum(/RootName/SeriesRootNode/Series/Ran[@dustId=$curID]/text())" /></td>
          </tr>
        </xsl:for-each>
      </table>
    </xsl:template>

    <!-- Remove not matched text nodes -->
    <xsl:template match="text()" />

</xsl:stylesheet>

【讨论】:

  • 您确实应该为此使用密钥。
  • @michael.hor257k:谢谢你提醒我。下次一定会的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-29
  • 2021-07-10
  • 1970-01-01
  • 2018-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多