XSLT函数返回类型

时间:2016-06-28 17:05:15

标签: xpath xslt-2.0

最初:**如何将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

2 个答案:

答案 0 :(得分:1)

你所做的是完全正确的,除了你已经将a元素传递给函数,并且函数正在寻找这个元素的a子元素,并且你的示例数据是将返回一个空序列。

答案 1 :(得分:0)

如果您希望f:test()返回序列中a元素的数量$frstElem,您可以使用类似

的内容
<xsl:value-of select="count($frstElem/self::a)" />

而不是使用(隐式)child::轴。