我一直在尝试用另一个具有相同元素的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
Qt的xmlpatterns不支持此功能。我已尝试过上面代码的不同版本,但没有运气。我已经使用XQuery获取部分XML文件,但我还没有找到解决方法来解决这个问题。
也许Qt的工具支持它?我无法在Qt的网页上找到关于如何做类似事情的任何事情(xmlprocessing)。
答案 0 :(得分:1)
XQuery Update是XQuery的补充。根据{{3}}描述的内容,不支持XQuery Update。
由于不支持在没有XQuery Update的情况下修改元素,因此您必须重新构建整个树,并应用一些修改。对于一般用法,可以使用公共Qt 5 XQuery documentation来实现,但是对于没有嵌套元素的相当简单的结构,通过对结构进行硬编码,您可以更轻松地执行此操作。
<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实现。 XQuery pattern with a kind of copy
function,Saxon以及其他可能提供C ++语言绑定或实现。