c++ - 如何使用 Qt 5 和 XQuery 将一个元素替换为另一个 XML 文件中的元素

标签 c++ xml qt xquery

我一直在尝试用另一个具有相同元素的 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/

相关文章:

xml - 获取 XSL 中的最后几个节点,跨越父节点

android - map 布局问题

python - PyQt 静态构建在 make 时失败

c++ - 使用 MinGW 编译自动化代理

c++ - 为什么我得到 "You must feed a value for placeholder tensor ' 输出 ' 与 dtype int64"?

c++ - 从 python 中提取类

c++ - 获取 Qt 对象的大小

c++ - gcc soname 无法识别的命令行

java - 如何从包含第三方库使用的自定义注释的 XML/XSD 动态创建 Java 对象

c++ - Qt:glClear 不适用于 OpenGL 上的过度绘制