2016-01-22 65 views
1

我一直在試圖取代一個元素與元素替換一個元素(和它的子元素)與來自另一個XML文件具有相同元素的內容。如何使用Qt 5和XQuery從另一個XML文件

實施例:

FILEA:

<A> 
    <B id="1"> 
     // more sub elements 
    </B> 
    <B id="2"> 
     // more sub elements 
    </B> 
</A> 

FILEB

<A> 
    <B id="1"> 
     // other sub elements than FileA has 
    </B> 
</A> 

從這個來源: http://docs.basex.org/wiki/XQuery_Update

我嘗試以下:

copy $c := doc('FileA') 
modifiy (
    replace node $c/A/B[@id='1'] with element doc('FileB')/A/B[@id='1'] 
) 
return $c 

這不支持byt Qt的xmlpatterns。我已經嘗試了上面的代碼的不同版本,但沒有運氣。我已經在使用XQuery獲取XML文件的部分內容,但是我還沒有找到解決方法。

也許Qt的工具dosent支持它嗎?我無法在Qt的頁面上找到關於如何做類似的事情(xmlprocessing)。

回答

1

XQuery更新是對XQuery的補充。根據Qt 5 XQuery documentation描述的內容,不支持XQuery更新。

由於沒有修改元素,而XQuery更新不支持,你就必須重建整個樹將一些修改。對於一般用法,這可以通過一個共同的XQuery pattern with a kind of copy function來實現,但對於沒有嵌套元素的相當簡單的結構,通過對結構進行硬編碼,可以在沒有函數的情況下更輕鬆地完成工作。

<A>{ 
for $B-fileA in doc('/tmp/a.xml')/A/B 
let $B-fileB := doc('/tmp/b.xml')/A/B[@id = $B-fileA/@id] 
return 
    if ($B-fileB) 
    then $B-fileB 
    else $B-fileA 
}</A> 

或者,您可以依賴支持XQuery Update的XQuery實現。 Saxon,BaseX和其他可能提供的C++語言綁定或實現。

+0

謝謝。 XML文件有點複雜,因此不能使用簡單的方法,但我會查看您發佈的鏈接。但是,如果我決定使用QDom或QXmlReader/QXmlWriter進行這項工作,您更喜歡哪一個? –

+0

我沒有與他們任何一個工作,我很抱歉。 –

相關問題