我有一个XML文档,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<items>
<item s_no="1">
<title>title_1</title>
<path>path1</path>
<desc>descriptoion1</desc>
</item>
<item s_no="2">
<title>title_2</title>
<path>path2</path>
<desc>descriptoion2</desc>
</item>
这是从Qt中的QXmlStreamWriter
生成的。我想要一个函数来添加<item>
标记以及<title>, <path>
等所有元素。我想要一个函数通过标识s_no
属性来删除项标记。所有这一切都应该完成,而不会影响文件中的任何其他内容。
我经常搜索,我知道有类似的问题,我尝试了一些代码,但它没有用。在QDomDocument
?
答案 0 :(得分:1)
当我过去考虑这样做时,它实际上并不是一件微不足道的事情。
QDomDocument
和QDomNode
我认为您应该可以使用QDomDocument
和QDomNode
来完成此操作。有时很难在主页面上看到所有可能的函数用于类的文档,因为它可以从它派生自的抽象类中获得很多...单击“所有成员列表”显示完整列表
http://doc.qt.io/qt-5/qdomdocument-members.html
有些看似有希望的电话包括:childNodes
elementById
elementsByTagName
createNode
insertBefore
insertAfter
removeChild
。
更新:一个工作示例,显示了如何在QDomDocument上删除和插入节点的直接方式。
https://github.com/peteristhegreat/xml_insert_remove
请注意,在添加QDomNodes / QDomElements等时,需要在文档上创建每个元素,否则在离开函数时它不会保留在范围内。
QXmlStreamReader
和QXmlStreamWriter
我见过的一些文档(几年前)说他们强烈建议使用QXmlStream
*类,因为它们得到了更好的支持,或者最近都得到了维护。我认为它有一些更好的错误处理,并且不必加载整个文档是有用的。
因此,就编辑文档并重新保存文档而言,我所知道的最直接的方法是读取所有内容,并将其存储为嵌套的C ++类,然后将其写出来。
QJson
示例(类似于QXmlStream
* Json有一个类似的例子,它真正展示了将read和write函数子类化到模型中的能力。
http://doc.qt.io/qt-5/qtcore-json-savegame-example.html
我认为可以使用XML的流读取器和编写器类来完成类似的方法。
希望有所帮助。