XSLT:聚合父节点中的子节点数据

时间:2018-10-17 14:00:25

标签: xml xslt lxml

假设我有以下节点:

<parent>
  <child size="1" />
  <child size="2" />
  <child size="3" />
</parent>

我想在输出文档中得到的是子项大小的平均值,最小值和最大值。即

<parent min-size="1" max-size="3" avg-size="2" />

是否可以将XSLT 1.0与EXSLT扩展一起使用?

1 个答案:

答案 0 :(得分:0)

以下是使用math:max()math:min() ...的示例。

XSLT 1.0 (stylesheet.xsl)

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  xmlns:math="http://exslt.org/math"
  extension-element-prefixes="math">
  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="parent">
    <parent min-size="{math:min(child/@size)}" 
      max-size="{math:max(child/@size)}" 
      avg-size="{sum(child/@size) div count(child/@size)}"/>
  </xsl:template>

</xsl:stylesheet>

Python

from lxml import etree

tree = etree.parse("input.xml")
xslt = etree.parse("stylesheet.xsl")

new_tree = tree.xslt(xslt)

print(etree.tostring(new_tree, pretty_print=True).decode("utf-8"))

输出

<parent min-size="1" max-size="3" avg-size="2"/>