我有以下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方法。
提前谢谢。
答案 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函数完全相同的调用约定(例如,隐式雾化),并且您的被调用代码可以自己进行任何进一步的转换。