【发布时间】:2018-08-10 14:51:19
【问题描述】:
我正在从 Saxon 9.3 (PE) 切换到更新的版本。 我正在使用扩展函数(带有“扩展 ExtensionFunctionDefinition”)
我的参数定义为
public SequenceType[] getArgumentTypes() {
return new SequenceType[] {SequenceType.ANY_SEQUENCE, SequenceType.ANY_SEQUENCE, SequenceType.NODE_SEQUENCE, SequenceType.SINGLE_STRING};
}
在 XSLt 中,调用是使用例如第一个参数上的变量进行的,这是一个构建的 XML 部分。
<xsl:variable name="graphXML">
<CHART>
<xsl:attribute name="FORMAT">PNG</xsl:attribute>
<xsl:attribute name="HEIGHT">
...
</xsl:variable>
随叫随到,
private static class GrapheurCall extends ExtensionFunctionCall {
private static final long serialVersionUID = 1L;
@Override
public Sequence call(XPathContext context, Sequence[] arguments) throws XPathException {
我需要更改我的代码,因为 ExtensionFunctionCall 接口发生了变化(以前,我有
public SequenceIterator call(SequenceIterator[] arguments, XPathContext context) throws XPathException { ...
)
我现在有两个问题:
1) 参数类型从 SequenceIterator 更改为 Sequence。 就这样
NodeInfo dataNode = (NodeInfo) arguments[0].next();
不能再使用了,并且
NodeInfo dataNode = (NodeInfo) arguments[0];
给我一个运行时错误
net.sf.saxon.value.SingletonItem cannot be cast to net.sf.saxon.om.NodeInfo
虽然收到的对象是 TinyTree(根据运行时进行的调试)。
2)返回值也不同(从SequenceIterator到Sequence) 我以前有 return new ListIterator(saxon_result);
这已经不可能了(saxon_result 是 java.util.ArrayList ) 在这里,我不知道如何将我的 ArrayList 作为一个序列发回......
任何有见识的人可以对此有所了解吗? 谢谢! 法比恩
【问题讨论】: