2012-09-03 25 views
2

我有以下目標。我想查找哪些文檔包含執行任何類型的Xquery或XPath時的數據。換句話說,我需要每個給我提供給定查詢結果數據的文檔。我試圖在eXist-db環境中執行此操作,但我想應該在Xquery級別上有一些東西。如何查找訪問來回答我的Xquery查詢的文檔?

我找到了op:context-document()運算符,它似乎具有我想要的功能,但作爲運算符,它不適用於我。 fn:document-uri也不會這樣做,因爲它的$ arg必須是一個文檔節點,否則它會返回一個空序列。

你有什麼想法嗎?所有的援助是高度讚賞。

回答

1

fn:base-uri()可能有幫助;它返回一個節點的基礎URI屬性:

for $d in doc('....')/your[query] 
return base-uri($d) 

你也可以用它來過濾文檔特定類型:

collection('/path/to/documents')[ends-with(base-uri(), '.xml')] 
+0

謝謝你,該訣竅我。 – user1644560

+0

儘管如此,技術上,節點的基本URI依賴於'xml:base'屬性的值,儘管如此也並不一定就是你想要的。我會爲$(在你的查詢中)/ ancestor-or-self :: document-node()返回document-uri($ d)'返回結果中所有文檔的列表。 –

+0

謝謝你,奧利弗。在我征服了存在的觸發器之後,今晚我會仔細觀察一下。 :)再一次,高度讚賞。 – user1644560

0

使用標準的XPath/XQuery功能collection()

例如,使用撒克遜:

collection('file:///a/b/c/d?select=*.xml')[yourBooleanExpression] 

選擇所有XML文檔的文檔節點,駐留在/a/b/c/d目錄中的文件系統的,滿足搜尋條件(yourBooleanExpression評估爲true()