Xpoint
   [напомнить пароль]

Обработка данных из XML на JavaScript

Метки: [без меток]
2007-08-07 09:53:51 [обр] Алексей[досье]

Я с помощью JavaScript генерирую страницу html из xml и xsl. Получается список отсортированных записей(id### - шт.). Например
id124-12
id124-18
id132-8
После получения такой страницы я хочу суммировать например все значения id124 (в приведенном примере получается 18+12=30)
Как мне на JavaScript перебрать все значения по строкам и суммировать их или можно это сделать средствами XSLT в цикле for-each?
Подскажите пожалуйста.
PS
вот код xml файла test.xml":
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?xml-stylesheet type="text/xsl" href="XSLTFile.xsl"?>
 <tag1>
  <tag2>
    <tag3 id="1321" number="72" />
    <tag3 id="1337" number="322" />
    <tag3 id="1321" number="69" />
    <tag3 id="1337" number="331" />
    <tag3 id="1337" number="28" />
    <tag3 id="1321" number="74" />
    <tag3 id="1337" number="37" />
    <tag3 id="1321" number="63" />
    <tag3 id="1321" number="4" />
 </tag2>
</tag1>

вот код xsl файла XSLTFile.xsl:
  <?xml version="1.0" encoding="utf-8"?>
  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
      <html>
      <body>
        <xsl:for-each select="tag1/tag2/tag3">
      <xsl:sort select="@id"/>
         <xsl:value-of select="@id"/>
         <i> / </i>
         <xsl:value-of select="@number"/>
   </xsl:for-each>
      </body>
      </html>
  </xsl:template>
  </xsl:stylesheet>

вот код html файла со скриптом:
    <html>
    <head>
    <script language="JavaScript">
    var source;
    var style;
    function init()
{
    source = new ActiveXObject("Microsoft.XMLDOM");
    source.async = false;
    style = new ActiveXObject("Microsoft.XMLDOM");
    style.async = false;
    source.load("test.xml");
    style.load("XSLTFile.xsl");
    document.all.item("xslresult").innerHTML = source.transformNode(style);
    return true;
}
</script>
</head>
<body onLoad="init()">
<div id="xslresult">
</div>
</body>
</html>

спустя 3 часа 29 минут [обр] keep(0/3)[досье]

можно посчитать на xslt. Только for-each тут не сильно подходит. Значение переменных в xslt нельзя изменять. Это функциональный язык. Но выход есть - рекурсия.

вот неплохая статья, помогающая понять как это можно сделать.

Powered by POEM™ Engine Copyright © 2002-2005