是否可以在没有QDomDocument的情况下创建QDomElement?例如,这是一个期望在元素parent
下构建节点树的函数:
void buildResponse (QDomDocument &doc, QDomElement &parent) {
QDomElement child = doc.createElement("child");
parent.appendChild(child);
}
我必须传递doc
的唯一原因是将其用作工厂来创建函数在parent
下添加的元素。在我现在正在处理的应用程序中,如果我不必拖拽QDomDocument
,它会稍微简化我的实现。
有没有办法在没有文档的情况下创建节点?
答案 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;
}