XSL: fonction somme (en ajoutant les valeurs xml)

  • dogbert
  • Novice
  • Novice
  • Avatar de l’utilisateur
  • Inscription: Déc 06, 2007
  • Messages: 28
  • Loc: Tacoma, WA
  • Status: Offline

Message Mai 5th, 2009, 3:10 pm

Bonjour,

Ive a regardé autour du filet à l'aide et essayé un certain nombre de façons d'obtenir ce que je veux pas de solution de travail pour ce qui Im essayant de faire, ce qui me tracasse comme il semble que cela devrait être très facile. Je veux ajouter des éléments en place dans mes doc XML, simple que cela.

exemple de fichier XML. adding.xml
Code: [ Select ]
 
<?xml version="1.0"?>
<things>
     <thing>
          <name>one</name>
          <description>one</description>
          <numbertoadd>1.2</numbertoadd>
     </thing>
     <thing>
          <name>two</name>
          <description>two</description>
          <numbertoadd>2.3</numbertoadd>
     </thing>
     <thing>
          <name>three</name>
          <description>three</description>
          <numbertoadd>3.2</numbertoadd>
     </thing>
</things>
 
  1.  
  2. <?xml version="1.0"?>
  3. <things>
  4.      <thing>
  5.           <name>one</name>
  6.           <description>one</description>
  7.           <numbertoadd>1.2</numbertoadd>
  8.      </thing>
  9.      <thing>
  10.           <name>two</name>
  11.           <description>two</description>
  12.           <numbertoadd>2.3</numbertoadd>
  13.      </thing>
  14.      <thing>
  15.           <name>three</name>
  16.           <description>three</description>
  17.           <numbertoadd>3.2</numbertoadd>
  18.      </thing>
  19. </things>
  20.  


Ce que je veux faire est d'ajouter le "numbertoadd" elemets de chacun dans ce cas, donné lieu à 6. 7

Si cela est important, Im using ASP Classic pour formater le xml avec une feuille de style XSL pour être en mesure de le mettre où je veux.
Par exemple adding.asp
Code: [ Select ]
 
<%
 
set xml = Server.CreateObject("Microsoft.XMLDOM")
xml.async = false
xml.load(Server.MapPath("adding.xml"))
 
set xsl = Server.CreateObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load(Server.MapPath("adding.xsl"))
 
    Response.Write(xml.transformNode (xsl))
 
    Response.write("show that it does something.......")
   
%>
 
  1.  
  2. <%
  3.  
  4. set xml = Server.CreateObject("Microsoft.XMLDOM")
  5. xml.async = false
  6. xml.load(Server.MapPath("adding.xml"))
  7.  
  8. set xsl = Server.CreateObject("Microsoft.XMLDOM")
  9. xsl.async = false
  10. xsl.load(Server.MapPath("adding.xsl"))
  11.  
  12.     Response.Write(xml.transformNode (xsl))
  13.  
  14.     Response.write("show that it does something.......")
  15.    
  16. %>
  17.  


Toute aide ou de conseils sont très appréciés.

Merci,
Chris (dogbert)
  • Anonymous
  • Bot
  • No Avatar
  • Inscription: 25 Feb 2008
  • Messages: ?
  • Loc: Ozzuland
  • Status: Online

Message Mai 5th, 2009, 3:10 pm

  • Bogey
  • Bogey
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Juil 14, 2005
  • Messages: 8211
  • Loc: USA
  • Status: Offline

Message Mai 5th, 2009, 3:51 pm

Voulez - cet vous aider de quelque façon?


Un autre post:
Quote:
Il vous suffit de sélectionner les noeuds que vous voulez avec une somme Xpath, puis appliquer
somme () à ceux-là.


Ne pas savoir si celles-ci aident...juste quelque chose que je trouve la recherche google .
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • dogbert
  • Novice
  • Novice
  • Avatar de l’utilisateur
  • Inscription: Déc 06, 2007
  • Messages: 28
  • Loc: Tacoma, WA
  • Status: Offline

Message Mai 8th, 2009, 9:19 am

Me désigna pour la bonne direction mais après avoir jouer avec lui et d'autres exemples Ive a trouvé que je n'ai pas eu de chance, relly me tracasse, alors j'ai décidé de passer à une solution que je n'ai plus knoledge avec.

mon coup de fusil à tirer seulement les données et faire les maths dans le fichier ASP.

adding.xsl
Code: [ Select ]
 
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
<xsl:template match="/">
      <xsl:for-each select="dailytasks/task">
 
        <xsl:value-of select="tasktime" />#
      </xsl:for-each>
 
</xsl:template>
 
</xsl:stylesheet>
 
  1.  
  2. <?xml version="1.0" encoding="ISO-8859-1"?>
  3. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
  4. <xsl:template match="/">
  5.       <xsl:for-each select="dailytasks/task">
  6.  
  7.         <xsl:value-of select="tasktime" />#
  8.       </xsl:for-each>
  9.  
  10. </xsl:template>
  11.  
  12. </xsl:stylesheet>
  13.  


ajoutez. asp
Code: [ Select ]
 
<%
 
set xml = Server.CreateObject("Microsoft.XMLDOM")
xml.async = false
xml.load(Server.MapPath("adding.xml"))
 
On Error Resume Next
 
set xsl = Server.CreateObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load(Server.MapPath("adding.xsl"))
 
On Error Resume Next
 
Dim numbr, num, valu, length, fnl, kickr, kickrn
 
    numbr = xml.transformNode(xsl)
       
    num = split(numbr, "#")
   
    kickr = Cdbl(num(0))
   
    length = Ubound(num)
   
    valu = 0
   
    for x = 0 to Ubound(num)
        valu = (valu + Cdbl(num(x)))
    next
   
        fnl = (valu + kickr)
   
On Error Resume Next
   
   
%>
<%= numbr %> <em>: all together no format<br/></em>
<br/>Static Counts:<br/><br/>
<%= num(0) %> <em>: First After The Split<br/></em>
<%= num(1) %> <em>: Seccond After The Split<br/></em>
<%= num(2) %> <em>: Third After The Split<br/></em>
<%= num(3) %> <em>: Fourth After The Split<br/></em>
<%= num(4) %> <em>: Fifth After The Split<br/></em>
<%= num(5) %> <em>: Sixth After The Split<br/></em>
<%= num(6) %> <em>: Seventh After The Split<br/></em>
<%= num(7) %> <em>: Eight After The Split<br/><br/></em>
<%= length %> <em>: Lenght of the Array<br/><br/></em>
<%= valu %> <em>: Final Before the Kicker<br/></em>
<%= kickr %> <em>: The Kicker Value<br/><br/></em>
<%= fnl %> <em>: The Total Hours Spend per the adding.xml log - Should be "8"<br/></em>
 
  1.  
  2. <%
  3.  
  4. set xml = Server.CreateObject("Microsoft.XMLDOM")
  5. xml.async = false
  6. xml.load(Server.MapPath("adding.xml"))
  7.  
  8. On Error Resume Next
  9.  
  10. set xsl = Server.CreateObject("Microsoft.XMLDOM")
  11. xsl.async = false
  12. xsl.load(Server.MapPath("adding.xsl"))
  13.  
  14. On Error Resume Next
  15.  
  16. Dim numbr, num, valu, length, fnl, kickr, kickrn
  17.  
  18.     numbr = xml.transformNode(xsl)
  19.        
  20.     num = split(numbr, "#")
  21.    
  22.     kickr = Cdbl(num(0))
  23.    
  24.     length = Ubound(num)
  25.    
  26.     valu = 0
  27.    
  28.     for x = 0 to Ubound(num)
  29.         valu = (valu + Cdbl(num(x)))
  30.     next
  31.    
  32.         fnl = (valu + kickr)
  33.    
  34. On Error Resume Next
  35.    
  36.    
  37. %>
  38. <%= numbr %> <em>: all together no format<br/></em>
  39. <br/>Static Counts:<br/><br/>
  40. <%= num(0) %> <em>: First After The Split<br/></em>
  41. <%= num(1) %> <em>: Seccond After The Split<br/></em>
  42. <%= num(2) %> <em>: Third After The Split<br/></em>
  43. <%= num(3) %> <em>: Fourth After The Split<br/></em>
  44. <%= num(4) %> <em>: Fifth After The Split<br/></em>
  45. <%= num(5) %> <em>: Sixth After The Split<br/></em>
  46. <%= num(6) %> <em>: Seventh After The Split<br/></em>
  47. <%= num(7) %> <em>: Eight After The Split<br/><br/></em>
  48. <%= length %> <em>: Lenght of the Array<br/><br/></em>
  49. <%= valu %> <em>: Final Before the Kicker<br/></em>
  50. <%= kickr %> <em>: The Kicker Value<br/><br/></em>
  51. <%= fnl %> <em>: The Total Hours Spend per the adding.xml log - Should be "8"<br/></em>
  52.  


résultat étant très proche mais il ne me laisse pas convertir la première valeur du tableau num "num (0)" en un entier décimal doit être ajoutée ainsi Il n'ajoute pas. Note les bennes tableau num (0) parce que la boucle doit commencer à 1 Im donc de l'ajouter dans la suite. Il fonctionne parfaitement sauf pour le premier numéro, a essayé avec d'autres fichiers XML avec le même résultat.
Code: [ Select ]
 
0.50# 0.25# 0.50# 0.50# 1.50# 0.50# 0.50# 3.75# : all together no format
 
Static Counts to check:
 
0.50 : First After The Split
0.25 : Seccond After The Split
0.50 : Third After The Split
0.50 : Fourth After The Split
1.50 : Fifth After The Split
0.50 : Sixth After The Split
0.50 : Seventh After The Split
3.75 : Eight After The Split
 
8 : Lenght of the Array
 
7.5 : Final Before the Kicker
: The Kicker Value
 
7.5 : The Total Number per the adding.xml log - Should be "8"
 
  1.  
  2. 0.50# 0.25# 0.50# 0.50# 1.50# 0.50# 0.50# 3.75# : all together no format
  3.  
  4. Static Counts to check:
  5.  
  6. 0.50 : First After The Split
  7. 0.25 : Seccond After The Split
  8. 0.50 : Third After The Split
  9. 0.50 : Fourth After The Split
  10. 1.50 : Fifth After The Split
  11. 0.50 : Sixth After The Split
  12. 0.50 : Seventh After The Split
  13. 3.75 : Eight After The Split
  14.  
  15. 8 : Lenght of the Array
  16.  
  17. 7.5 : Final Before the Kicker
  18. : The Kicker Value
  19.  
  20. 7.5 : The Total Number per the adding.xml log - Should be "8"
  21.  
  • Zwirko
  • Guru
  • Guru
  • Avatar de l’utilisateur
  • Inscription: Mai 29, 2005
  • Messages: 1417
  • Loc: 55° N, 3° W
  • Status: Offline

Message Mai 8th, 2009, 1:39 pm

Vous pouvez additionner ces nœuds d'une manière assez simple, comme ceci:

Code: [ Select ]
<?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='1.0' encoding='UTF-8' indent='yes'/>
 
<xsl:template match="/">
 
<total><xsl:value-of select='sum(/things/thing/numbertoadd)'/></total>
 
</xsl:template>
</xsl:stylesheet>
  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <xsl:stylesheet version="1.0"
  4. xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  5. <xsl:output method='html' version='1.0' encoding='UTF-8' indent='yes'/>
  6.  
  7. <xsl:template match="/">
  8.  
  9. <total><xsl:value-of select='sum(/things/thing/numbertoadd)'/></total>
  10.  
  11. </xsl:template>
  12. </xsl:stylesheet>


Le système IVE XSLT écrit mai être d'être simpliste pour vos besoins, mais il ne donne les valeurs de la "numbertoadd« nœuds à 6,7
  • dogbert
  • Novice
  • Novice
  • Avatar de l’utilisateur
  • Inscription: Déc 06, 2007
  • Messages: 28
  • Loc: Tacoma, WA
  • Status: Offline

Message Mai 22nd, 2009, 10:40 am

Voir qui est exactement ce que je cherchais, je ne sais pas pourquoi je ne pouvais pas obtenir la fonction somme de travail à tous. Mais cela semble fonctionner pour moi, peut-il avoir été le indent = "yes"?

Quoi qu'il en soit, grande grâce.

Afficher de l'information

  • Total des messages de ce sujet: 5 messages
  • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 110 invités
  • Vous ne pouvez pas poster de nouveaux sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas éditer vos messages
  • Vous ne pouvez pas supprimer vos messages
  • Vous ne pouvez pas joindre des fichiers
 
 

© 2011 Unmelted, LLC. Ozzu® est une marque déposée de Unmelted, LLC