汇总两个数组中的XML数据

use*_*967 8 xml arrays xslt xpath addition

我是XSL和XML的新手,我希望这是一个简单的问题.我有一个XML文件,其中包含两个数字数组,我需要求和.这是XML文件的一部分

<?xml version="1.0" encoding="UTF-8"?>
<out_xml>
<Root>
    <ItemCollection>
        <Item name="BaseLineOffSet" type="2">
            <Histogram>
                <DispOrder>This is Order</DispOrder>
                <IntensityArray>
                    <Intensity>105.84667205810547</Intensity>
                    <Intensity>105.83854675292969</Intensity>
                    <Intensity>105.57729339599609</Intensity>
                    <Intensity>105.66104888916016</Intensity>
                    <Intensity>105.56392669677734</Intensity>
                    <Intensity>105.33917236328125</Intensity>
                    <Intensity>105.33854675292969</Intensity>
                    <Intensity>105.31544494628906</Intensity>
                    <Intensity>105.40036010742187</Intensity>
                    <Intensity>105.21470642089844</Intensity>
                    <Intensity>105.14356994628906</Intensity>
                    <Intensity>104.92792510986328</Intensity>
                    <Intensity>104.93791961669922</Intensity>
                    <Intensity>104.93979644775391</Intensity>
                    <Intensity>104.96470642089844</Intensity>
                    <Intensity>105.01107025146484</Intensity>
                    <Intensity>104.76479339599609</Intensity>
                    <Intensity>104.9085693359375</Intensity>
                    <Intensity>104.70166778564453</Intensity>
                    <Intensity>104.75499725341797</Intensity>
                    <Intensity>104.77352905273437</Intensity>
                    <Intensity>104.77714538574219</Intensity>
                    <Intensity>104.59485626220703</Intensity>
                    <Intensity>104.73235321044922</Intensity>
                    <Intensity>104.35479736328125</Intensity>
                    <Intensity>104.56911468505859</Intensity>
                    <Intensity>104.38999938964844</Intensity>
                    <Intensity>104.30992889404297</Intensity>
                    <Intensity>104.37964630126953</Intensity>
                </IntensityArray>
            </Histogram>
        </Item>
        <Item name="DispIntervalsMaxValues" type="2">
            <Histogram>
                <DispOrder>This is Order</DispOrder>
                <IntensityArray>
                    <Intensity>1.0229243040084839</Intensity>
                    <Intensity>48.868541717529297</Intensity>
                    <Intensity>47.504795074462891</Intensity>
                    <Intensity>162.17105102539062</Intensity>
                    <Intensity>91.323570251464844</Intensity>
                    <Intensity>44.405426025390625</Intensity>
                    <Intensity>51.243541717529297</Intensity>
                    <Intensity>131.44705200195312</Intensity>
                    <Intensity>2.8496425151824951</Intensity>
                    <Intensity>21.435295104980469</Intensity>
                    <Intensity>47.006423950195312</Intensity>
                    <Intensity>0.72917240858078003</Intensity>
                    <Intensity>46.669178009033203</Intensity>
                    <Intensity>83.804801940917969</Intensity>
                    <Intensity>44.197799682617187</Intensity>
                    <Intensity>32.138923645019531</Intensity>
                    <Intensity>30.30479621887207</Intensity>
                    <Intensity>58.928920745849609</Intensity>
                    <Intensity>29.930421829223633</Intensity>
                    <Intensity>38.282505035400391</Intensity>
                    <Intensity>30.801467895507813</Intensity>
                    <Intensity>43.710361480712891</Intensity>
                    <Intensity>38.167644500732422</Intensity>
                    <Intensity>27.842643737792969</Intensity>
                    <Intensity>34.102294921875</Intensity>
                    <Intensity>61.118381500244141</Intensity>
                    <Intensity>10.910002708435059</Intensity>
                    <Intensity>3.6150767803192139</Intensity>
                    <Intensity>3.1703603267669678</Intensity>
                </IntensityArray>
            </Histogram>
        </Item>
    </ItemCollection>
</Root>
</out_xml>
Run Code Online (Sandbox Code Playgroud)

我真正想要的是要加起来的两个Intensity数组中的元素之和.所以它会是这样的:

FirstArray [0] + SecondArray [0] = sum [0]这是真的

105.84667205810547 + 1.0229243040084839 = 106.8696和

FirstArray [1] + SecondArray [1] = sum [1]

105.83854675292969+ 48.868541717529297 = 154.7071依此类推......

在这两者之间还有一些其他项目,我现在需要忽略.

谢谢 !

Kir*_*huk 2

更新

sum函数,例如:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output omit-xml-declaration="yes" indent="yes"/>

  <xsl:key name="k" match="Intensity" use="count(preceding-sibling::Intensity)"/>

  <xsl:template match="/">
    <root>
      <xsl:apply-templates select="//Intensity[generate-id(.) = 
                           generate-id(key('k', count(preceding-sibling::Intensity)))]"/>
    </root>
  </xsl:template>

  <xsl:template match="Intensity">
    <sum>
      <xsl:value-of select="sum(key('k', count(preceding-sibling::Intensity)))"/>
    </sum>
  </xsl:template>

</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

该模板Intensity对两者的元素求和IntensityArray

输出:

<root>
  <sum>106.86959636211395</sum>
  <sum>154.70708847045898</sum>
  <sum>153.08208847045898</sum>
  <sum>267.8320999145508</sum>
  <sum>196.8874969482422</sum>
  <sum>149.74459838867187</sum>
  <sum>156.58208847045898</sum>
  <sum>236.7624969482422</sum>
  <sum>108.25000262260437</sum>
  <sum>126.6500015258789</sum>
  <sum>152.14999389648437</sum>
  <sum>105.65709751844406</sum>
  <sum>151.60709762573242</sum>
  <sum>188.74459838867187</sum>
  <sum>149.16250610351562</sum>
  <sum>137.14999389648437</sum>
  <sum>135.06958961486816</sum>
  <sum>163.8374900817871</sum>
  <sum>134.63208961486816</sum>
  <sum>143.03750228881836</sum>
  <sum>135.5749969482422</sum>
  <sum>148.48750686645508</sum>
  <sum>142.76250076293945</sum>
  <sum>132.5749969482422</sum>
  <sum>138.45709228515625</sum>
  <sum>165.68749618530273</sum>
  <sum>115.3000020980835</sum>
  <sum>107.92500567436218</sum>
  <sum>107.5500066280365</sum>
</root>
Run Code Online (Sandbox Code Playgroud)