2011-10-30 51 views
0

需要幫助構建xquery以從XML文件中刪除數據包含Google產品數據饋送數據的文件。使用查找列表的Xquery刪除類型查詢

我有一個需要刪除的電子表格列中的很多ID號 - 這些都是數字。

下面是xml模式。我需要選擇<g:id> =「我的數字串」的所有記錄,然後從文件中刪除它們。

感謝您的幫助!

<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0"> 
<channel> 
    <title></title> 
    <link></link> 
    <description></description> 
    <item> 
    <title></title> 
    <link></link> 
    <description></description> 
    <g:id></g:id> 
    <g:condition></g:condition> 
    <g:price></g:price> 
    <g:availability></g:availability> 
    <g:image_link></g:image_link> 
    <g:brand></g:brand> 
    <g:mpn></g:mpn> 
    <g:product_type></g:product_type> 
    </item> 
</channel> 
</rss> 

回答

1

此的XQuery

declare namespace g = "http://base.google.com/ns/1.0"; 

<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0"> 
    <channel> 
    { 
    let $vIds := (1,3) 
    return 
     /*/*/*[not(g:id = $vIds)] 
    } 
    </channel> 
</rss> 

當所提供的XML文檔施加:

<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0"> 
    <channel> 
    <title></title> 
    <link></link> 
    <description></description> 
    <item> 
     <title>Item 1</title> 
     <link></link> 
     <description></description> 
     <g:id>1</g:id> 
     <g:condition></g:condition> 
     <g:price></g:price> 
     <g:availability></g:availability> 
     <g:image_link></g:image_link> 
     <g:brand></g:brand> 
     <g:mpn></g:mpn> 
     <g:product_type></g:product_type> 
    </item> 
    <item> 
     <title>Item 2</title> 
     <link></link> 
     <description></description> 
     <g:id>2</g:id> 
     <g:condition></g:condition> 
     <g:price></g:price> 
     <g:availability></g:availability> 
     <g:image_link></g:image_link> 
     <g:brand></g:brand> 
     <g:mpn></g:mpn> 
     <g:product_type></g:product_type> 
    </item> 
    <item> 
     <title>Item 3</title> 
     <link></link> 
     <description></description> 
     <g:id>3</g:id> 
     <g:condition></g:condition> 
     <g:price></g:price> 
     <g:availability></g:availability> 
     <g:image_link></g:image_link> 
     <g:brand></g:brand> 
     <g:mpn></g:mpn> 
     <g:product_type></g:product_type> 
    </item> 
    </channel> 
</rss> 

產生想要的,正確的結果

<?xml version="1.0" encoding="UTF-8"?> 
<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0"> 
    <channel> 
     <title/> 
     <link/> 
     <description/> 
     <item> 
     <title>Item 2</title> 
     <link/> 
     <description/> 
     <g:id>2</g:id> 
     <g:condition/> 
     <g:price/> 
     <g:availability/> 
     <g:image_link/> 
     <g:brand/> 
     <g:mpn/> 
     <g:product_type/> 
     </item> 
    </channel> 
</rss> 
+0

謝謝Dimitre!這對我很好。我確信其他答覆也會,但我不知道該如何處理該變量。 BaseX的新手。 –

+0

@DanM:我很高興我的回答很有用。如果是這樣,請按照SO既定的表達感謝的方式,接受答案?這是通過點擊答案旁邊的複選標記完成的。 –

+0

@DanM:我用一個更簡單的解決方案更新了我的答案。 –

1

使用XQuery-Update delete-function

delete node doc("mydata.xml")//item[g:id = (1, 3, 5, 6, 8, 9, 12)] 

如果你不想碰你的原始數據,使用modify

copy $c := doc("mydata.xml")/ 
modify delete node $c//item[g:id = (1, 3, 5, 6, 8, 9, 12)] 
return $c 

=一些設置的語義進行比較,則返回如果在右側左側等於一個項目的真實。

+0

謝謝,我發現你的鏈接也是xbase。我安裝了它,現在就瞭解它。所以我添加了我的XML文檔到一個新的數據庫,打開它,然後我粘貼查詢編輯器,我得到未定義的變量$ x。我將其定義爲什麼? –

+0

對不起,'$ x'只包含我的XML片段以供測試。如果您打開數據庫,請將其刪除。對於其他系統,您可能需要添加doc(「無論」)。 –