2011-06-29 11 views
2

ドキュメントの構造を知るためにドキュメントを操作しようとしています。ドキュメントは私に提供されているので、元のドキュメントにアクセスすることはできませんが、サーバーに対してクエリを実行できます。私はそれがスキーマレスであると信じています。私はMarkLogicの一部であるCQ Webアプリケーションを通して文書にアクセスしています。XPath/XQueryですべての世代を取得するにはどうすればよいですか?

私は基本的に完全に人口が多いツリーを私に返したいと思います。これは本当に簡単ですが、証明されていません。私はW3Cといくつかの他のサイトを見てきましたが、何も動かないようです。あなたはMarkLogicを使用している場合は、多分あなたは、数千または数百万の「森」を照会しようとしている -

おかげイン進歩、

グイド

+0

完全に設定されたツリーを取得するには、XPathは '/'(ルートノード自体のクエリ)です。あなたはサーバーから何を得るのですか? – Tomalak

+0

@トマラク:ありがとう。 /はリクエストをクラッシュさせます。私は完全な木で一つのレコードを返そうとしています。 –

+0

再度:サーバーは何を**返すのですか? (あなたの要求がそれをクラッシュさせないとき...) – Tomalak

答えて

7

はたぶん文書が戻るためには大きすぎますサブ文書の?

文書の構造についてすべてを返そうとせずに学ぶ良い方法は、要素の名前を示す連続する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を使用することができますので、あなたは、たとえば、文書の先頭の3つのレベルで最初の3つの要素のために、上記のすべてのデータをプリントアウトするループを行うことができます。

また、/は、XPathでは「コンテキストノードを含むドキュメントのルートノード」を意味するため、何も返しません。 XML文書のデータベースであるXQueryingでは、まだコンテキストノードが存在しない可能性があります(注意:私はXQueryにうまく対応していないので、参考文献を確認してください)。代わりに、document('...')/でXPath式を開始する必要があります。うまくいけば、文書の名前を知っていますか?

また、this screenshotは、潜在的に有用なクエリを示しています。おもう。

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文書を表示するもう1つの方法は、デバッガを使用して、XML文書がすでに受信されているコード内の場所にブレークポイントを設定することです。次に、デバッガの可視化機能を使用して、XMLDocumentオブジェクトの "outerxml"または "innerxml"プロパティを取得します。

もちろん、異なるXML文書を別の要求に戻すことをサーバーが防げるものはありません。

0

CQを使用しているので、(クエリペインの左上に向かって)「探索」リンクをクリックすることができます。これにより、選択したデータベース内の文書のリストが表示されます。その文書のURIを使用して、その文書のfn:docを実行することができます。

fn:doc("/myuri.xml") 

これはその文書を返します。次に、XPathのステップを追加して、それをナビゲートすることができます。

関連する問題