首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何获取XPath/XQuery中的所有Decendent?

如何获取XPath/XQuery中的所有Decendent?
EN

Stack Overflow用户
提问于 2011-06-30 00:59:14
回答 3查看 5.3K关注 0票数 2

我正在尝试浏览一个文档,以了解其结构。文档正被提供给我,所以我不能访问原始文档,但我可以对服务器执行查询。我相信它是无模式的。我通过CQ web应用程序访问文档,该应用程序是MarkLogic的一部分。

我基本上希望得到一个完全填充的树返回给我。这看起来真的很容易,但事实证明并非如此。我浏览了W3C和其他几个站点,似乎什么都不起作用。

先说谢谢,

吉多

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-30 10:47:50

也许文档太大而无法返回--如果您使用的是MarkLogic,也许您正试图查询一个包含数千或数百万个子文档的“森林”?

要了解文档的结构而不试图返回所有内容,一种好方法是使用连续的XPath查询,这些查询会给出元素的名称。例如。

代码语言:javascript
运行
复制
name(/*)

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

代码语言:javascript
运行
复制
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) -->

等。

由于可以使用XQuery,因此可以执行一个循环,打印出文档顶层前三个元素的所有上述数据。

或者,/可能不返回任何内容,因为在XPath中,这意味着“包含上下文节点的文档的根节点”;而在XQuerying中,可能还没有上下文节点(注意:我对XQuery不是很流利,所以请检查您的参考资料)。相反,您可能必须以document('...')/开头XPath表达式;希望您知道文档的名称?

此外,this screenshot还显示了一些可能有用的查询。我认为。

票数 7
EN

Stack Overflow用户

发布于 2011-06-30 21:21:44

@LarsH推荐了一个有用的探索策略。

另一种方法是获取整个XML文档,例如应用XSLT标识转换:

代码语言:javascript
运行
复制
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

</xsl:stylesheet>

此转换生成的XML文档在大多数情况下与应用它的源XML文档(任何XML文档)完全相同。

查看确切XML文档的另一种方法是使用调试器,并在代码中已经接收到XML文档的位置设置断点。然后使用调试器可视化功能获取XMLDocument对象的"outerxml“或"innerxml”属性。

当然,没有什么能阻止服务器在不同的请求上返回不同的XML文档。

票数 1
EN

Stack Overflow用户

发布于 2011-07-01 23:42:29

由于您使用的是CQ,因此可以单击"explore“链接(位于查询窗格的左上角)。这将为您提供所选数据库中的文档列表。然后,您可以使用其中一个文档的URI并对其执行fn:doc:

代码语言:javascript
运行
复制
fn:doc("/myuri.xml")

这将返回一个文档。然后,您可以添加XPath步骤来向下导航。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6524458

复制
相关文章

相似问题

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