最初:**如何将XPath查询应用于键入为element()* **
的XML变量我希望将XPath查询应用于传递给XSLT 2.0中的函数的变量。
Saxon返回此错误:
std::vector::reserve
程序的这个框架已经过简化,但是在开发结束时,它意味着将元素树传递给多个XSLT函数。每个函数都将从树中提取某些统计信息并创建报告。
当我说应用XPath查询时,我的意思是我希望让查询考虑变量中的基本元素......如果你愿意......好像我可以写{count(doc(" My XSLT)树/元素变量")/ a [1])}。
使用Saxon HE 9.7.0.5。
Type error at char 6 in xsl:value-of/@select on line 13 column 50 of stackoverflow_test.xslt:
XTTE0780: Required item type of result of call to f:test is element(); supplied value has item type text()
一些示例数据
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:f="f:f">
<xsl:template match="/root">
<xsl:variable name="first" as="element()*">
<xsl:copy-of select="(./a[1])" />
</xsl:variable>
<html>
<xsl:copy-of select="f:test($first)" />
</html>
</xsl:template>
<xsl:function name="f:test" as="element()*">
<xsl:param name="frstElem" as="element()*" />
<xsl:value-of select="count($frstElem/a)" />
<!-- or any XPath expression -->
</xsl:function>
</xsl:stylesheet>
可能相关的问题:How to apply xpath in xsl:param on xml passed as input to xml
答案 0 :(得分:1)
你所做的是完全正确的,除了你已经将a
元素传递给函数,并且函数正在寻找这个元素的a
子元素,并且你的示例数据是将返回一个空序列。
答案 1 :(得分:0)
如果您希望f:test()
返回序列中a
元素的数量$frstElem
,您可以使用类似
<xsl:value-of select="count($frstElem/self::a)" />
而不是使用(隐式)child::
轴。