Saxon-HE集成扩展功能

时间:2014-09-10 23:22:40

标签: java xml xslt saxon

我原本应该通过声明我们的代码使用嵌入式saxon扩展函数 - 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)类型之外的任何内容

谢谢。

2 个答案:

答案 0 :(得分:4)

DocumentInfo类实现了Sequence,因此如果返回DocumentInfo,那将满足该接口。您可以使用

构建DocumentInfo
context.getConfiguration().buildDocument()

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

答案 1 :(得分:2)

对于任何阅读的人 - 在此之后我能够使用Michael Kay的帮助 - 我的解决方案如下:

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