Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
xsl:xml元素的平均值_Xml_Xslt - Fatal编程技术网

xsl:xml元素的平均值

xsl:xml元素的平均值,xml,xslt,Xml,Xslt,你能帮我找出错误的根源吗? 我希望找到xml中两个元素的平均值,并将其添加到最终的xml中。 我可能做错了什么,你能帮我一下吗 提前谢谢。 阿努拉 s=(c+d)/2 Xml文件 <?xml version="1.0" encoding="UTF-8"?> <top> <Results> <a>no</a> <b>12</b> <c>12<

你能帮我找出错误的根源吗?
我希望找到xml中两个元素的平均值,并将其添加到最终的xml中。
我可能做错了什么,你能帮我一下吗

提前谢谢。 阿努拉 s=(c+d)/2

Xml文件

<?xml version="1.0" encoding="UTF-8"?>
<top>
    <Results>
        <a>no</a>
        <b>12</b>
        <c>12</c>
        <d>9</d>
    </Results>
    <Results>
        <a>yes</a>
        <b>8</b>
        <c>50</c>
        <d>12</d>
    </Results>
    <Results>
        <a>no</a>
        <b>6</b>
        <c>55</c>
        <d>56</d>
    </Results>
    <Results>
        <a>yes</a>
        <b>23</b>
        <c>32</c>
        <d>34</d>
    </Results>
</top>

不
12
12
9
对
8.
50
12
不
6.
55
56
对
23
32
34
xsl文件


预期产出

<?xml version="1.0"?>
<top>
  <Results>
    <a>no</a>
    <b>12</b>
    <s>10.5</s>
    <c>12</c>
    <d>9</d>
  </Results>
  <Results>
    <a>yes</a>
    <b>8</b>
    <s>31</s>
    <c>50</c>
    <d>12</d>
  </Results>
  <Results>
    <a>no</a>
    <b>6</b>
    <s>55.5</s>
    <c>55</c>
    <d>56</d>
  </Results>
  <Results>
    <a>yes</a>
    <b>23</b>
    <s>33</s>
    <c>32</c>
    <d>34</d>
  </Results>
</top>

不
12
10.5
12
9
对
8.
31
50
12
不
6.
55.5
55
56
对
23
33
32
34
上面的代码和输入是模拟真实数据集的示例。因此,我希望识别这段代码中的错误,这是更大代码的一部分。
任何帮助都将受到高度赞赏

你的想法太复杂了

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="Results">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()" />
      <s><xsl:value-of select="(sum(c) + sum(d)) div 2" /></s>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

如果您坚持在
元素中使用子顺序,请使用

<xsl:template match="Results">
  <xsl:copy>
    <xsl:apply-templates select="@* | a | b" />
    <s><xsl:value-of select="(sum(c) + sum(d)) div 2" /></s>
    <xsl:apply-templates select="c | d" />
  </xsl:copy>
</xsl:template>

如果一个组中只能有一个
,这就足够了:

<xsl:value-of select="(c + d) div 2" />

我想我已经找到了解决报告问题的方法

问候

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>


<xsl:template match="@* | node()" name="identity">
  <xsl:copy>
    <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="b">
  <xsl:call-template name="identity"/>
  <xsl:variable name="x" select="../c"/>
  <xsl:variable name="y" select="../d"/>
  <s><xsl:value-of select="($x + $y) div 2"/></s>
</xsl:template>
</xsl:stylesheet>


我希望修复我的代码,因为我有大量的元素,平均值需要插入到特定的位置。我不确定你的意思。我的解决方案在特定位置插入平均值。您的解决方案在本例中确实有效,但在一个集合中约有40个元素(而不是上例中的4个)的情况下,很难实现。您能否提出一个可扩展的解决方案。谢谢,我还是不明白你的意思。我的解决方案使用4个元素和40000个元素。你说的“可伸缩”是什么意思?并产生完全相同的输出。你能解释一下为什么你认为你的方法更好(或者我的方法更差)?
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>


<xsl:template match="@* | node()" name="identity">
  <xsl:copy>
    <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="b">
  <xsl:call-template name="identity"/>
  <xsl:variable name="x" select="../c"/>
  <xsl:variable name="y" select="../d"/>
  <s><xsl:value-of select="($x + $y) div 2"/></s>
</xsl:template>
</xsl:stylesheet>