XQuery 如何使用 WHERE 查询获取整个 xml 文档

Posted

技术标签:

【中文标题】XQuery 如何使用 WHERE 查询获取整个 xml 文档【英文标题】:XQuery how to get whole xml document with WHERE query 【发布时间】:2012-08-10 11:14:43 【问题描述】:

我的 XML 数据库只有一个集合(容器),但我不知道文档名称。如何从 db 中获取符合 WHERE 子句的完整 XML 文档?

<root>
      <node1>
            <node2>
                   <node3>My Content</node2>
            </node2>
      </node1>
<root>

当我有疑问时

query 'collection("data1.dbxml")/root/node1/node2[node3 = "My Content"]/string()'

它从那个node3返回一个内容

'My Content'

query 'collection("data1.dbxml")/root/ode1/node2/node3'

它返回 2 个带有内容的内部节点

<node2><node3>My Content</node3></node2>

但是如何获取符合此 WHERE 子句的整个文档(例如 SELECT * FROM data2.dbxml WHERE node3='My Content'?

【问题讨论】:

【参考方案1】:

就像在第一个示例中那样使用谓词:

  collection("data1.dbxml")/root[node1/node2/node3 = "My Content"]

您可以将 XQuery 中的谓词视为 SQL 中的 WHERE,而 SELECT 部分则是之前的一切。

【讨论】:

【参考方案2】:

另一种解决方案...学习后:)

query 'for $x in collection("data1.dbxml") 
       where $x/root/node1/node2/node3 = "My Content"
       return $x'

或者当我们知道 XMLdoc 中节点的深度和节点的名称时

query 'for $x in collection("data1.dbxml") 
       where $x/*/*/*/node3 = "My Content"
       return $x'

感谢W3Schools

【讨论】:

不要引用或咨询 W3Schools,众所周知,它们会传播错误信息。

以上是关于XQuery 如何使用 WHERE 查询获取整个 xml 文档的主要内容,如果未能解决你的问题,请参考以下文章

xQuery,如何从带有孩子的节点获取文本?

如何使用 XQuery 获取 XML 文件中的子节点数

使用 XQuery 获取 XML 文件的文件名

在启动我想要运行的完整 XQuery 之前,如何验证嵌入在较大 XQuery 中的 Lucene 查询不包含语法错误?

sql 2005数据库 如何操作xml

如何将整个查询的 where 子句也应用于子查询?