2016-02-15 80 views

回答

5

cts:uri-match應該是你在尋找什麼。您可以在其中放置通配表達式,例如cts:uri-match('/myDirectory/sub-dir/*.xml')。這將返回的URI作爲一個字符串列表,然後你可以做這樣的事情得到大衆這些文件(注:fn:doc()可以採取零到許多的URI):

let $uris as xs:string* := cts:uri-match("/you/directory/structure/*.xml") 
let $docs as document-node()* := fn:docs($uris) 
return $docs 

按以下泰勒的評論,你應該通過在cts:query預選賽這種搜索如果可能的話,比如:

let $uris as xs:string* := cts:uri-match("/your/directory/structure/*.xml",(), cts:directory-query("/your/directory/structure/", "infinity")) 
let $docs as document-node()* := fn:docs($uris) 
return $docs 

在上面的例子中,cts:directory-query縮小範圍多一點,並注意「無限」將採取所有子目錄到無限水平。

或者,如果他們都是你想要的目錄(或多個目錄)下,且無需通配符進一步驗證文件名和這樣的,你可以這樣更好的東西,如:

cts:search(fn:collection(), cts:directory-query("/some-dir/", "infinity")) 

但是,如果你想使用正則表達式 - esque搜索,第一個選項肯定是你的朋友。

http://docs.marklogic.com/7.0/cts:uri-match

+3

這似乎是你正在尋找,但要小心使用此功能。如果你沒有用cts查詢來確定它的範圍,它將檢查數據庫中的所有Uris以及數據庫中有大量文件可能需要一段時間才能返回的數據庫。我會考慮在查詢可選的perm中放置一個cts:目錄查詢。 –

+0

謝謝@TylerReplogle,我相應地更新了答案。 – CtheGood

+0

完美。我檢查了一下,它在我的有限測試中也適用於非'/'的路徑。 –