我正在尝试浏览一个文档,以了解其结构。文档正被提供给我,所以我不能访问原始文档,但我可以对服务器执行查询。我相信它是无模式的。我通过CQ web应用程序访问文档,该应用程序是MarkLogic的一部分。
我基本上希望得到一个完全填充的树返回给我。这看起来真的很容易,但事实证明并非如此。我浏览了W3C和其他几个站点,似乎什么都不起作用。
先说谢谢,
吉多
发布于 2011-06-30 10:47:50
也许文档太大而无法返回--如果您使用的是MarkLogic,也许您正试图查询一个包含数千或数百万个子文档的“森林”?
要了解文档的结构而不试图返回所有内容,一种好方法是使用连续的XPath查询,这些查询会给出元素的名称。例如。
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中,可能还没有上下文节点(注意:我对XQuery不是很流利,所以请检查您的参考资料)。相反,您可能必须以document('...')/开头XPath表达式;希望您知道文档的名称?
此外,this screenshot还显示了一些可能有用的查询。我认为。
发布于 2011-06-30 21:21:44
@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文档的位置设置断点。然后使用调试器可视化功能获取XMLDocument对象的"outerxml“或"innerxml”属性。
当然,没有什么能阻止服务器在不同的请求上返回不同的XML文档。
发布于 2011-07-01 23:42:29
由于您使用的是CQ,因此可以单击"explore“链接(位于查询窗格的左上角)。这将为您提供所选数据库中的文档列表。然后,您可以使用其中一个文档的URI并对其执行fn:doc:
fn:doc("/myuri.xml")这将返回一个文档。然后,您可以添加XPath步骤来向下导航。
https://stackoverflow.com/questions/6524458
复制相似问题