TinyTextImpl insted String xslt

时间:2017-10-12 15:06:07

标签: java xslt xml-parsing xslt-2.0 saxon

我有以下XML,

<outer.element>
<bold>
<csc>CSCTEXT</csc> 
REST OF THE TEXT
</bold>
</outer.element>,

我尝试检索<outer.element>元素标记内的文本并将其发送到java方法。我得到以下例外,

XPathException:不允许包含多个项目的序列作为class的第二个参数:method()(&#34; CSCTEXT&#34;,&#34; REST OF THE TEXT&#34;)。

如果我在java方法签名中使用数组,我会得到以下异常,

&#34;无法将类型为text()的值类net.sf.saxon.tinytree.TinyTextImpl转换为类java.lang.String&#34;

如何将单个连接值(class:method()(&#34; CSCTEXT REST OF THE TEXT&#34;))发送到java方法。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

第一个错误:

XPathException:不允许包含多个项目的序列作为class的第二个参数:method()(&#34; CSCTEXT&#34;,&#34; REST OF THE TEXT&#34;)。

意味着当您只使用一个值时,您将使用一系列值调用Java方法。

在Java方法的签名中使用集合类将意味着单个项目不会被转换,因此第二个错误&#34;无法转换...&#34;。

一个解决方案是在函数调用中自己进行转换(例如,通过调用data()函数)。或者在Java方法中执行(在提供的项目上调用getStringValue()方法)。

如果我在Java中编写扩展函数专门从XPath / XSLT调用,那么我现在将在方法签名中使用特定于Saxon的类,例如ZeroOrMore<StringValue>。然后,Saxon将使用与本机XSLT / XPath函数完全相同的调用约定(例如,隐式雾化),并且您的被调用代码可以自己进行任何进一步的转换。