0

是否可以在没有可用 QDomDocument 的情况下创建 QDomElement ?例如,这里有一个函数,希望在 element 下构建一个节点树parent

void buildResponse (QDomDocument &doc, QDomElement &parent) {
    QDomElement child = doc.createElement("child");
    parent.appendChild(child);
}

我必须通过的唯一原因doc是将它用作工厂来创建函数在parent. 在我现在正在处理的应用程序中,如果我不必QDomDocument四处走动,它将稍微简化我的实现。

有没有办法在没有可用文档的情况下创建节点?

4

2 回答 2

3

您可以将文档作为参数删除,因为每个 QDomNode 都有方法ownerDocument()QDomElement继承QDomNode所以它也可以从parent参数访问。检查QDomNode文档。

于 2013-10-25T07:35:16.643 回答
1

我需要在我的项目中做类似的事情,但我根本无法访问父文档。我只是想返回一个 QDomNode 并将其添加到调用方法中的父树中。我正在从 libxml2 迁移并更改此行为需要对代码进行大量重新设计。所以上述解决方案对我不起作用。

我通过创建一个临时 QDomDocument 来解决它,然后使用它创建子树。回到调用方法,我已经将它导入到父文档中。这是一个例子:

#include <QtXml>
#include <iostream>

using namespace std;

QDomNode TestTree(void) {
    
    QDomDocument doc("testtree");
    QDomElement testtree=doc.createElement("testing");
    testtree.setAttribute("test","1");
    doc.appendChild(testtree);
    
    QDomElement testchild1 = doc.createElement("testje");
    testtree.appendChild(testchild1);
    
    QDomElement testchild2 = doc.createElement("testje");
    testtree.appendChild(testchild2);
    return testtree;
}

int main (int argc, char **argv) {
    
    QDomDocument doc("MyML");
    QDomElement root = doc.createElement("MyML");
    doc.appendChild(root);
    
    QDomElement tag = doc.createElement("Greeting");
    root.appendChild(tag);
    
    QDomText t = doc.createTextNode("Hello World");
    tag.appendChild(t);
    
    QDomNode testtree = TestTree();
    QDomNode testtree_copy=doc.importNode(testtree,true);
    root.appendChild(testtree_copy);
    
    QString xml = doc.toString();
    cout << qPrintable(xml) << endl;
    
    
}
于 2021-03-18T11:19:34.280 回答