我正在从 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 作为序列发回......
有知识的人能解释一下吗?谢谢!法比安