我有一个像这样的“目录”XML文档:
<root>
<N>A</N>
<N>B</N>
<!-- ... -->
<N>Z</N>
</root>
许多单独的XML文档,其名称如下:
A_foo.xml
A_bar.xml
B_foo.xml
B_bar.xml
...
Z_foo.xml
Z_bar.xml
其中每个都包含一个数字,即A_foo.xml类似于:
<!-- A_foo.xml -->
<X>10</X>
我需要将每个子文档中的X中的所有值相加。我尝试过天真的XSLT / Xpath,如:
<xsl:variable select="sum(document('./path/to/', //N, '_foo.xml')//X")/>
但没有成功。
答案 0 :(得分:1)
我相信在XSLT 1.0(浏览器支持的唯一版本)中,您必须在两次传递中执行此操作。试试这种方式:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
extension-element-prefixes="exsl">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:template match="/root">
<!-- first pass -->
<xsl:variable name="values">
<xsl:for-each select="N">
<value>
<xsl:value-of select="document(concat('./path/to/', ., '_foo.xml'))/X "/>
</value>
</xsl:for-each>
</xsl:variable>
<!-- output -->
<p>
<xsl:value-of select="sum(exsl:node-set($values)/value)"/>
</p>
</xsl:template>
</xsl:stylesheet>