2017-08-12 1 views
0

J'ai donc ce code XML où j'ai besoin d'ajouter toutes les valeurs avec le même identifiant. Obtenir l'ID de l'attribut Identité ne pas le comparer à comme la valeur 10 ou quelque chose.XSL - comment ajouter toutes les valeurs avec le même attribut?

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

Donc, pour cela, je dois montrer quelque chose comme ça

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

J'ai essayé de le faire, mais je ne peux obtenir le total de tous. Donc, je reçois

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

Comment procéder?
Je suis assez nouveau pour écrire XSLT.

+0

Pouvez-vous éditer votre question pour montrer le XSLT que vous avez essayé s'il vous plaît? Je vous remercie. –

Répondre

0

Ceci est un fonctionnement random.xsl.
Sa sortie est comme souhaité dans le navigateur.

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

Vous devriez vraiment utiliser une clé pour cela. –

+0

@ michael.hor257k: Merci de me le rappeler. Bien sûr, fera la prochaine fois. – zx485