gpt4 book ai didi

java - 如何在 saxon 中扩展 doc() 功能

转载 作者:行者123 更新时间:2023-12-02 03:18:41 25 4
gpt4 key购买 nike

我正在寻找 SAXON 中当前可用的 doc() 功能的扩展,它不是从文件系统或 http 网络读取 XML,而是从内存中读取 XML,我在内存中保存了这些 xml。

我想使用它的方式是这样的:

mydoc('id')/root/subroot/@myattr

doc('mydoc://id')/root/subroot/@myattr

到目前为止我考虑过:

  1. 使用 queryEvaluator.setContextItem() - 无法解决我的用例,因为我可以在一个查询中拥有多个 XML 源
  2. 将一些自己的 URL 方案协议(protocol)注册到 Java 中 - 在我看来有点矫枉过正,我从未这样做过
  3. 编写自己的 ExtensionFunction - 到目前为止似乎是正确的方法,但我很困惑是否应该使用 ExtensionFunction 还是 ExtensionFunctionDefinition。另外,我对 Doc_1 和 Doc Saxonica 源代码有点困惑,因为它使用 Atomizer 和其他未知的内部东西。

所以问题是:

  1. 变体 3 是最好的方法(就简单而言)还是您会推荐其他方法?
  2. 可以使用 ExtensionFunction 并从内存中的 xml 返回 XdmNode 吗?在我看来它应该可行,但我真的不想陷入一些边缘情况或撒克逊雷区。

我们将感谢经验丰富的 Saxon 用户的任何评论。

最佳答案

执行此操作的标准方法是编写 URIResolver并将其注册到变压器中。 URIResolver被调用,提供请求的 URI,并且预计返回一个 Source (例如,可以是 StreamSourceSAXSourceDOMSource )。在这种情况下,您通常会返回 StreamSource包装StringReader其中包含 String包含 XML。

您同样可以使用扩展函数,但它可能有点复杂。

关于java - 如何在 saxon 中扩展 doc() 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56942922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com