2013-03-20 54 views
1

我想创建QDomElement这样的:QDomElement会在创建它的函数中失效吗?

class DomParser : public QObject 
{ 
public: 
    DomParser(); 
QDomDocument doc; 
QDomElement* root; 
} 

QDomElement* DomParser::domParameterStatus(UniversalMessage* parameterStatus) 
{ 

    root = &(doc.createElement("doc")); 
    QDomText latin = doc.createTextNode("Ars longa vita brevis"); 
    QDomText english = doc.createTextNode("Art is long, life is short"); 
    doc.appendChild(root); 
    root.appendChild(quote); 
    root.appendChild(translation); 
    ... 
    return root; 
} 

我做根在课堂上的DOMParser成员只保存DOM树结构,但将根的孩子是有效的该功能的?

回答

1

是的,只要doc不被破坏。从documentation

因为元素,文本节点,注释,处理指令等,不能在文档的环境之外存在,文件类还包含创建这些对象所需的工厂功能。创建的节点对象具有ownerDocument()函数,该函数将它们与创建它们的上下文的文档相关联。最常用的DOM类是QDomNode,QDomDocument,QDomElement和QDomText。

解析的XML在内部由可以使用各种QDom类访问的对象树表示。所有QDom类只引用内部树中的对象。一旦最后一个引用它们的QDom对象和QDomDocument本身被删除,DOM树中的内部对象将被删除。

而且,使用appendChild reparents子节点,所以只要根源是他们的父母和存在,他们不会去任何地方。

+0

QT5说:“DOM树将被删除,一旦最后QDom对象引用它们** **或将QDomDocument本身被删除”。 – 2017-04-20 11:32:25

0

要回答你的问题:是的,所有元素,一旦添加到父节点,只要他们的父母存在,将继续有效。

你在这里的代码是不正确的,并且不会编译。此行:root = &(doc.createElement("doc"));正试图创建一个指向临时变量的指针。这不仅是一个非常糟糕的主意,导致几乎一定的崩溃,它根本就没有必要。 QDom被设计为完全基于价值,你根本不需要使用指针。这里是你的方法固定的版本:

QDomElement DomParser::domParameterStatus(UniversalMessage* parameterStatus) 
{ 
    root = doc.createElement("doc"); 
    QDomText latin = doc.createTextNode("Ars longa vita brevis"); 
    QDomText english = doc.createTextNode("Art is long, life is short"); 
    doc.appendChild(root); 
    root.appendChild(quote); 
    root.appendChild(translation); 
    ... 
    return root; 
} 
相关问题