使用BaseX查询XML流/字符串的Java示例

使用BaseX查询XML流/字符串的Java示例,xml,xquery,basex,Xml,Xquery,Basex,我试图编写Java代码,在本地模式下使用BaseX查询通过点击web服务返回的XML 我不确定传递XML的不同方式。我应该吗 用XML数据绑定外部变量并传递给XQuery,然后使用fn:parse() 使用fetch模块 或者还有其他更好的方法吗 是否有其他具有类似功能和内置模块的XQuery 3.0处理器?解决方案1:绑定外部变量 这意味着您必须首先将XML数据存储为java变量,然后将其传递给BaseX。您当然可以这样做,它看起来是这样的: declare variable $t as xs

我试图编写Java代码,在本地模式下使用BaseX查询通过点击web服务返回的XML

我不确定传递XML的不同方式。我应该吗

  • 用XML数据绑定外部变量并传递给XQuery,然后使用
    fn:parse()
  • 使用
    fetch
    模块
  • 或者还有其他更好的方法吗
  • 是否有其他具有类似功能和内置模块的XQuery 3.0处理器?

    解决方案1:绑定外部变量 这意味着您必须首先将XML数据存储为java变量,然后将其传递给BaseX。您当然可以这样做,它看起来是这样的:

    declare variable $t as xs:string external;
    parse-xml($t)
    
    解决方案2:使用fetch()
    fetch:text()
    fetch:binary()
    是可流化的,但是
    parse xml
    将具体化字符串(注意,函数名为
    parse-xml()
    而不是
    parse()
    ,如您的问题所述

    parse-xml(fetch:text("YOUR-URI"))
    
    解决方案3:直接在XQuery中获取数据 您还可以使用http模块从web服务检索数据:

    http:send-request(<http:request method='get'></http:request>, "YOUR-URI")[2]
    
    http:send请求(,“YOUR-URI”)[2]
    

    在我看来,解决方案3似乎是最简单的方法,如果您在Java代码中不再需要这个结果。否则,您可能希望坚持解决方案1。

    如何从获取的请求生成XML文档,我在BaseX中找不到任何关于此的文档。您是否可以共享一个小代码片段,如何在数据获取上运行XQueryd使用http:send-request。非常感谢dirkk!!@user268203数据将已经被解析并且是有效的XML,也就是说,您可以执行XQuery/XPath表达式,例如
    (http:send-request(,“YOUR-URI”)[2])//div
    为您提供所有
    div
    元素。非常感谢!在我面临的一些服务中,“prolog中不允许内容”可能是UTF-8 BOM问题,如何克服此问题?@Tirtha您必须包含tagsoup来解析HTML(这通常是无效的XML,可能导致此错误)。有关详细信息,请参阅