创建没有QDomDocument的QDomNodes

时间:2013-10-24 18:36:41

标签: qt4 qt4.7 qtxml

是否可以在没有QDomDocument的情况下创建QDomElement?例如,这是一个期望在元素parent下构建节点树的函数:

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

我必须传递doc的唯一原因是将其用作工厂来创建函数在parent下添加的元素。在我现在正在处理的应用程序中,如果我不必拖拽QDomDocument,它会稍微简化我的实现。

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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;
    
    
}