首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将XQuery结果作为新文档存储在BaseX中

如何将XQuery结果作为新文档存储在BaseX中
EN

Stack Overflow用户
提问于 2016-01-15 18:50:00
回答 1查看 1.1K关注 0票数 2

我对XML文档数据库技术、Xquery/Xpath等技术非常陌生。所以这可能是一个非常新鲜的问题。

场景:许多XML文档作为输入,想要运行一定数量的转换就可以在这些XML文档上运行(使用XQuery)。我想保存这些结果。输入到同一个XML数据存储区中。

到目前为止,我正在尝试使用BaseX文档数据库来存储和处理这些XML文档,到目前为止,它非常容易使用,我对此印象深刻。

理想情况下,我希望使用XQJ (http://xqj.net/basex/)与http://xqj.net/basex/进行接口,因为我的推理是,XQJ将保持应用程序代码的实现与BaseX无关。第二个选项是将我的java代码直接写入BaseX API。

问题:我很难弄清楚如何将XQuery的结果作为一个新的“文档”存储在数据库中。也许这更多地是对XQuery (或XQuery更新)本身缺乏概念上的理解,而不是对BaseX/XQJ有任何困难。

在这个简单的例子中,如果我有这样的查询,它会以我想要的格式返回一些XML输出。

代码语言:javascript
复制
let $items := //firstName
return <results>
   { for $item in $items
     return <result> {$item} </result>
   }
   </results>

给出

代码语言:javascript
复制
<results>
  <result>
    <firstName>Bob</firstName>
  </result>
  <result>
    <firstName>Joe</firstName>
  </result>
  <result>
    <firstName>Tom</firstName>
  </result>
</results>

我想将这个新的<result>文档存储回数据库中,以便在以后的查询/转换/等等中使用。在SQL中,这对我来说是有意义的。我会做CREATE TABLE <name> SELECT <query>INSERT INTO等,但我不清楚XQuery中的等价物是什么。我认为XQuery更新功能是我在这里需要的,但是我很难找到具体的例子。

这在处理XQJ时更加复杂。

代码语言:javascript
复制
XQResultSequence rs = xqe.executeQuery("//firstName");
// what do i do with it now??

是否有一种使用XQResultSequence将此BaseX持久化回数据库的方法?或者更好的是,我可以直接在XQueries上运行额外的XQResultSequence吗?

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

发布于 2016-01-15 19:30:03

BaseX实现XQuery更新设施,所以您应该能够使用fn:put

代码语言:javascript
复制
let $items := //firstName
return fn:put(
   <results>{ 
     for $item in $items
     return <result> {$item} </result>
   }</results>, 
  "/results/result-new.xml")

如果您正在运行像上面这样简单的即席查询,那么它应该是相当简单的。我对XQJ不是很熟悉,但是如果您想按顺序运行查询,我怀疑有一种方法可以将这些XQResultSequence变量传递回一个新的查询,在这个查询中,您可能会通过在以下查询中将一个变量声明为外部变量来接受它:

代码语言:javascript
复制
declare variable $previous-result as item()* external;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34817780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档