问题标签 [qdomdocument]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1308 浏览

c++ - 使用 XPath 在 QDomDocument 中搜索节点

我被 C# 及其在命名空间中的 XML 操作类宠坏了(可以肯定的是)System.Xml。我可以将 XML 文件加载到XmlDocument. 我可以在整个文档中搜索与 XPath 表达式匹配的节点,使用XmlNode.SelectNodes( "an xpath expression" ). 结果是一个XmlNodeList包含XmlNode我可以迭代的对象。

现在我正在使用 C++ Qt(版本 4.7.1 和 4.8,但特定版本可能并不重要)。我可以将 XML 文件加载到QDomDocument. 但是,我很沮丧,因为我无法像在 C# 中那样使用 XPath 表达式搜索文档。

QXmlQuery我使用在 XML 文件中查找内容的成功有限。如果我以正确的方式编写查询,我可以获得一个QStringList结果,迭代它QStringList,然后将数据存储在某个地方以备后用。

但是,我仍然希望能够QDomNode直接通过 XPath 表达式获取文档中的对象集合。一个特定的用例是找到一个“名称”属性具有特定值的元素,然后用新元素替换该元素。这就是为什么我想要QDomNode对象本身,而不仅仅是QXmlQuery可以提供的基于字符串或其他 XML 内容的表示。对于刚才提到的特定用例,我是通过使用QDomElement.elementsByTagName()和迭代这些元素来获得的,但它不像 XPath 那样灵活也不酷。

只是一厢情愿吗?是否值得努力开发一些实现QAbstractXmlReceiver接口的新类?或者,我最终会得到一个与 中的QDomNode对象没有直接关系的新数据集合QDomDocument吗?

0 投票
2 回答
209 浏览

c++ - 我应该在堆上创建一个新的 QDomDocument 吗?

我将加载多个 XML 文件,每个文件都放入 aQDomDocument中,然后使用 aQMap将标识字符串与每个文档相关联。我应该在地图中存储 aQDomDocument还是指向 a 的指针QDomDocument?即,以下哪个示例更符合 Qt 最佳设计实践。

我怀疑示例 A 是首选。我看到的所有代码示例都只是QDomDocument在堆栈上创建一个本地。并且,sizeof( QDomDocument )是4个字节;因此,QDomDocument它可能是一个薄包装器,可以在不影响性能的情况下进行浅层复制。

A:地图包含QDomDocument实例

B. Map 包含指向QDomDocument实例的指针

0 投票
1 回答
210 浏览

python - 无法分割一个 QDomDocument() 节点的 xml 元素并使用 pyqt5 将元素附加到 DOM 模型

到目前为止,我有这段代码可以使用,以获得 xml 文件的直接树视图:

xml文件是:

我得到了这个: 在此处输入图像描述

代码很大但不是很复杂。我的问题是我希望将每个分支名称作为树模型中的不同项目,并且所有用逗号分隔的值都是模型的唯一项目。我尝试解析 xml,并QDomElement()尝试将子节点附加到我的节点以便能够分别选择每个分支。

我想用“,”分割所有分支名称,并将这个节点添加到我的 DOM 中。

QDomDocument如果课程不是最好的方式,我将非常感谢任何对此的帮助,以及处理此问题的任何建议。

非常感谢

0 投票
0 回答
63 浏览

c++ - 寻求Qt5 WYSIGWG编辑器设计建议

我正在计划一个新的桌面应用程序。它将为 HL7 文件(OSS 项目)提供一个所见即所得的编辑器。HL7 是医院常用的一种结构化文件格式,用于在系统之间交换数据。

格式的基本结构由\r 分隔的记录组成。一条记录可以有 N 个|分隔的字段。字段本身可以细分为组件^,子组件&和字段可以重复~(类似于数组)。每种消息类型都有不同数量的字段/组件和子组件。可以省略记录末尾的空字段。

简单记录示例: OBX|14|NM|0050–5^Calcium||8.9|mg/dl|8.4–10.4||||F

我已经实现了一个高效的解析器,它将整个文件转换为 C 中的分层数据结构。我想实现一个允许像在文本编辑器中编辑这些文件的应用程序。我想在任何时候保留底层的层次结构数据结构,因此很容易在用户更改时快速验证每个字段的结构和内容。

另外值得注意的是,我已经实现了一个查看器,其中文档结构显示在QTreeView. 该结构使用QAbstractItemModel.

现在我的实际问题是:我将如何解决在 Qt 中使用带有结构化数据模型的文本编辑器的问题。我做了一些研究:

  • 有一个QDomDocument,似乎可以使用 xml 数据。我可以将我的结构转换为 XML,但是 dom 对象可以与文本编辑器一起使用吗?
  • 有没有办法将像文档模型这样的树绑定到QTextEditor QPlainTextEdit
  • 是否可以将 a 绑定到orQAbstractItemModel中的文档?QTextEditQPlainTextEdit

解决一旦通过在文本字段中编辑更改文本和/或严格性而更新树的文本表示的问题的最佳方法是什么?

性能和跨平台能力很重要,所以这个项目将用 C++ 实现。

感谢您提供任何建议和示例,如果您有的话。

-S

0 投票
1 回答
59 浏览

c++ - QT 5.11.3 - QDomNode:无法打印 dom 元素的值

我正在尝试创建一个非常函数来读取一个非常简单的 XML 文件并在 QTCreator 控制台上打印其内容。

我创建了以下 XML 文件:

然后我创建了以下函数,它应该打印每个“SCANNER”标签内的每个节点:

我的问题是,我可以完美地打印每个节点的标记名,但由于某种原因,我无法打印每个标记内的值。n2.nodeValue() 未显示在控制台上。

有什么我做错了吗?

0 投票
1 回答
23 浏览

qt - QDomElement::text() 没有子元素文本?

我有一个像这样的xml:

以及一个解析QDomDocument包装它的递归函数。该函数对s进行迭代QDomNode,将其转换为QDomElements并调用text()方法获取数据。不幸的是,也QDomElement::text()可以在<a>水平上工作并返回:123. 所以它收集了所有嵌套元素的文本。
我希望它返回一个空字符串 bcs,我宁愿不检查tagName()值,因为它们可能很多。所以我宁愿通过haveng/没有文本来检查节点标签,反之亦然。这是可行的吗?是否有一种方法可以<a>为级别返回空字符串和文本值<b>, <c>, <d>
PSQDomNode::nodeValue()为所有元素返回一个空文本。

0 投票
0 回答
24 浏览

c++ - 如何打破 XML 类的 Qt 依赖关系

由于某些现在不应该关注的原因,我试图打破我的C++ dll 项目的Qt依赖关系。此时,我需要为我的项目更改Qt库XML文档QDomDocumentQDomNodeListQDomElement

我之前实现了一个信号量类。然而,实现所有这些XML类似乎是一项非常艰巨的工作。我正在寻找一种更简单的方法来做到这一点。

C++语言版本是C++11。如有必要,可以升级。

0 投票
1 回答
38 浏览

c++ - 删除嵌套 xml 中的节点会从 QDomNodeList 中删除节点,但是在保存文件时,没有任何变化

我有一个大的 xml 文件,我需要从中删除特定节点

而且我检查了 noderoots2 计数,当我删除子节点时它确实下降了,但是当我保存文件时,文件没有变化。

这是一个xml文件的例子