2016-01-22 48 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

我没有与他们任何一个工作,我很抱歉。 –

相关问题