如何在XPath/XQuery中获取所有后代?

Gui*_*lmi 2 xml xpath xquery

我正在尝试浏览文档以了解其结构.该文档正在向我提供,因此我无法访问原始文档,但我可以对服务器进行查询.我相信它是无架构的.我通过作为MarkLogic一部分的CQ Web应用程序访问该文档.

我基本上想让一棵完全填充的树归还给我.这似乎很容易,但尚未证实.我查看了W3C和其他几个网站,似乎没有任何工作.

提前致谢,

圭多

Lar*_*rsH 7

也许文档太大而无法返回 - 如果您正在使用MarkLogic,也许您正在尝试查询数千或数百万个子文档的"森林"?

在不尝试返回所有文档的情况下了解文档结构的好方法是使用连续的XPath查询来为您提供元素的名称.例如

name(/*)
Run Code Online (Sandbox Code Playgroud)

这将告诉您最外层元素的名称.然后,

name(/*/*[1]) <!-- name of first child of outermost element -->
name(/*/*[2])

/*/text()[1]  <!-- content of first text node under outermost element -->

count(/*/*)   <!-- number of children of outermost element -->

name(/*/@*[1]) <!-- name of first attribute of outermost element (untested) -->
Run Code Online (Sandbox Code Playgroud)

等等

既然您可以使用XQuery,那么您可以执行一个循环,打印出文档前三个级别的前三个元素的所有上述数据.

或者,/可以不返回任何内容,因为在XPath中这意味着"包含上下文节点的文档的根节点"; 在XQuerying XML文档数据库中,可能还没有上下文节点(警告:我在XQuery中不是很流利,所以请检查你的引用).相反,您可能必须启动XPath表达式document('...')/; 希望你知道文件的名称?

此外,此屏幕截图显示了一些可能有用的查询 我认为.