2010-01-19 55 views
0

我是XQuery的完全noob,但在開始深入挖掘之前,我想問一些專家的建議,在正確的方向。XQuery - 基於其處於「禁止」列表中的子元素刪除節點

問題: 一個巨大的XML文件,其中包含了一大堆用戶和他們的訪問信息(密碼,訪問權限等)的例子如下:

<user> 
    <name>JC1234</name> 
    <password>popstar</password> 
    <accesslevel>0</accesslevel> 
</user> 
<user> 
    <name>AHkl</name> 
    <password>Rudy10!</password> 
    <accesslevel>2</accesslevel> 
</user> 

我有用戶名列表(CSV文件),我需要從該巨大的XML文件中刪除。 結果應該是一個新的XML文件沒有那些被刪除的用戶....

這對XQuery是否可行? 任何建議快速和骯髒的解決方案,歡迎!

回答

1

雖然大多數實現都具有未解析文本函數或類似函數,但在vanilla XQuery 1.0中沒有用於加載CSV文件的標準方法。如果不是,則可以將該文件的內容作爲參數傳入。

的CSV文件,可以使用令牌化功能解析:

declare variable $names = tokenize(unparsed-text("banned.csv"), ",") 

和實際查詢是非常簡單的。假設你的文檔是一個僅包含<user />節點列表中的片段,則查詢是簡單

doc("users.xml")/user[not(name=$names)] 

但是,如果XML文件中包含了很多其他的數據,那麼你可能會發現XSLT的模板設施更加有用。