我正在尝试浏览文档以了解其结构。该文档正在向我提供,因此我无法访问原始文档,但我可以对服务器进行查询。我相信它是无架构的。我通过作为MarkLogic一部分的CQ Web应用程序访问该文档。
我基本上想让一棵完全填充的树归还给我。这似乎很容易,但尚未证实。我查看了W3C和其他几个网站,似乎没有任何工作。
由于式提前,
圭
答案 0 :(得分:7)
也许文档太大而无法返回 - 如果您正在使用MarkLogic,也许您正在尝试查询数千或数百万个子文档的“森林”?
了解文档结构而不尝试返回所有文档的好方法是使用连续的XPath查询来为您提供元素的名称。 E.g。
name(/*)
这将告诉您最外层元素的名称。然后,
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 XML文档数据库中,可能还没有上下文节点(警告:我在XQuery中不是很流利,所以请检查你的引用)。相反,您可能必须使用document('...')/
启动XPath表达式;希望你知道文件的名称吗?
此外,this screenshot显示了一些可能有用的查询。我想。
答案 1 :(得分:1)
@LarsH推荐了一种有用的探索策略。
另一种方法是获取整个XML文档,例如应用XSLT标识转换:
<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文档的代码中的某个位置设置断点。然后使用debugger visualization capabilitis获取XMLDocument对象的“outerxml”或“innerxml”属性。
当然,没有什么能阻止服务器在不同的请求上返回不同的XML文档。
答案 2 :(得分:0)
由于您使用的是CQ,因此可以单击“浏览”链接(位于查询窗格的左上角)。这将为您提供所选数据库中的文档列表。然后,您可以使用其中一个文档的URI并执行它的fn:doc:
fn:doc("/myuri.xml")
那将返回那个文件。然后,您可以添加XPath步骤以向下导航。