使用BaseX查询XML流/字符串的Java示例
我试图编写Java代码,在本地模式下使用BaseX查询通过点击web服务返回的XML 我不确定传递XML的不同方式。我应该吗使用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
fn:parse()
fetch
模块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,可能导致此错误)。有关详细信息,请参阅