Saxon HE集成扩展功能



我最初应该发布我的问题,声明我们的代码使用了一个嵌入的saxon:parse($xml)扩展函数,它返回了xml的根元素/节点。然而,在Saxon HE中,该扩展已不可用,因此我尝试编写一个集成扩展,将xml字符串解析为文档并返回根元素。

我使用的是Saxon HE 9.5.1.6-我正试图编写一个返回文档ROOT节点的集成扩展函数。该函数接收一个xml字符串-创建一个文档,并需要将根节点返回给xslt,然后使用xpath查找特定元素。ExtensionFunctionCall类/类型的call()方法返回Sequence类型-如何返回NodeSequence或NodeType?如何从我的文档中构造NodeSequence?

我可以逐步调试并确认函数接收到正确的xml-将其解析为文档,但到目前为止,我无法确定如何使用RootElement构建NodeSequence。

我有其他返回StringValue的集成扩展函数,这些函数工作得很好,但我无法从可用的类方法中了解到如何从ExtensionFunctionCall 返回除简单(numerica/alpha/item)类型之外的任何其他类型

谢谢。

DocumentInfo类实现了Sequence,所以如果您返回DocumentInfo,它将满足接口。您可以使用构建DocumentInfo

context.getConfiguration().buildDocument()

如果您想使用一些外部对象模型(如DOM或JDOM2)构建文档,则需要获取该外部文档的根节点,并将其封装在适当类型的Saxon DocumentWrapper中,以使其成为DocumentInfo。

对于任何阅读本文的人来说,在Michael Kay的帮助下,我的解决方案如下:

Source source = new StreamSource(new StringReader(myXMLparam));
DocumentInfo docInfo = context.getConfiguration().buildDocument(source);
return docInfo;

最新更新