我一直在尝试用另一个具有相同元素的 XML 文件中的内容替换一个元素(及其子元素)。
例子:
文件A:
<A>
<B id="1">
// more sub elements
</B>
<B id="2">
// more sub elements
</B>
</A>
文件B
<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
这是 Qt 的 xmlpatterns 不支持的。我尝试了上面代码的不同版本,但没有成功。我已经在使用 XQuery 获取部分 XML 文件,但我还没有找到如何执行此操作的解决方案。
也许 Qt 的工具不支持它?我在 Qt 的页面上找不到任何关于如何做类似事情的信息(xmlprocessing)。
最佳答案
XQuery 更新是对 XQuery 的补充。来自什么 Qt 5 XQuery documentation描述,不支持 XQuery 更新。
由于不支持在没有 XQuery Update 的情况下修改元素,因此您必须应用一些修改来重建整个树。对于一般用途,这可以通过常见的 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 更新的 XQuery 实现。两者 Saxon , BaseX并且可能其他人提供 C++ 语言绑定(bind)或实现。
关于c++ - 如何使用 Qt 5 和 XQuery 将一个元素替换为另一个 XML 文件中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34949374/