代码之家  ›  专栏  ›  技术社区  ›  Marvelo

XSL-如何添加具有相同属性的所有值?

  •  0
  • Marvelo  · 技术社区  · 7 年前

    <?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    |
    

    我该怎么办?

    1 回复  |  直到 7 年前
        1
  •  0
  •   zx485 potemkin    7 年前

    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>