Первоначально: ** Как применять XPath запрос к переменной XML напечатанного в качестве элемента() * **XSLT Функция Возвращаемый тип
Я хотел бы применить XPath запросов к переменной передается функции в XSLT 2.0.
саксонские возвращает эту ошибку:
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()
Этот скелет программы упрощается, но, к концу своего развития, оно призвано передать элемент дерева для нескольких функций XSLT. Каждая функция будет извлекать определенную статистику и создавать отчеты из дерева.
Когда я говорю, применяю запросы XPath, я имею в виду, что хочу, чтобы запрос рассматривал базовый элемент в переменной ... если угодно ... как если бы я мог написать {count (doc ("My XSLT tree/элементная переменная ")/a [1])}.
Использование Saxon HE 9.7.0.5.
<?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>
Некоторые примеры данных
<root>
<a>
<b>
<c>hi</c>
</b>
</a>
<a>
<b>
<c>hi</c>
</b>
</a>
</root>
Возможно, связанный с этим вопрос: How to apply xpath in xsl:param on xml passed as input to xml
Так какой результат вы ожидаете? Вы передаете элемент 'a', который имеет дочерний элемент' b', результат 'count ($ frstElem/a)' должен быть 0. –
Я немного изменил вопрос: спасибо за ввод. Это дает мне уверенность, что я на правильном пути, но компилятор не заботится об этом ... –