XSL - 如何添加具有相同属性的所有值?
XSL - how to add all values with the same attribute?
所以我有这个 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 还很陌生。
这是一个有效的 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>
所以我有这个 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 还很陌生。
这是一个有效的 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>