QDomDocument类代表了一个XML文件 QDomDocument类代表整个的XML文件。概念上讲:它是文档树的根节点,并提供了文档数据的基本访问方法。 由于元素、文本节点、注释、指令执行等等不可能脱离一个文档的上下文,所以文档类也包含了需要用来创建这些对象的工厂方法。被创建的节点对象有一个ownerDocument()函数,它将对象与对象常见的文档上下文环境关联起来。DOM类中最常使用的是QDomNode、QDomDocument、QDomElement和QDomText。 解析后的XML文件在内部是通过一个对象树来表示的,对象树可以使用各种QDom类进行访问。所有的QDom类只引用内部树上的对象。一旦最后一个DOM树的QDom对象和QDocument本身被删除掉时,DOM树上的所有内部对象会被删除掉。 元素、文本节点等的创建是通过使用类提供的各种工厂方法完成的。使用QDom类的缺省构造函数只会生成空的对象,这些空的对象不能操作,也不能哈如到文档中。 QDomDocument类有一些创建文档数据的函数,例如:createElement(),createTextNode(),createComment(),createCDATASection(), createProcessingInstruction(),createAttribute(),和createEntityReference().其中一些函数含有支持名字空间的版本,例如:createElementNS()和createAttributeNS().函数createDocumentFragment()用来持有文档的部分内容,这对于处理复杂文档很有用。 使用setContent设置文档的全部内容。该函数解析传入的XML文档字符串并创建代表文档的DOM树。根节点可以使用documentElement()得到。文档的文本呈现可以使用toString()函数得到。 可以使用importNode()将其它文档的节点插入到当前文档中。 你可以使用elementsByTagName()和elementsByTagNameNS()来获取所有元素中含有特定标签的列表。 QDom类的典型使用方法如下: QDomDocument doc("mydocument"); QFile file("mydocument.xml"); if (!file.open(QIODevice::ReadOnly)) return; if (!doc.setContent(&file)) { file.close(); return; } file.close(); //打印出最外层元素所有直接的子节点的元素名称 QDomElement docElem = doc.documentElement(); QDomNode n = docElem.firstChild(); while (!n.isNull()) { QDomElement e = n.toElement(); //将节点转换为元素 if (!e.isNull()) { cout<<qPrintable(e.tagName())<<endl; } n = n.nextSibling(); } // 在文档的结尾添加一个新的元素 QDomElement elem = doc.createElement("img"); elem.setAttribute("src", "myimage.png"); docElem.appendChild(elem); 一旦doc和elem出了范围,整个的代表XML文档的内部树都会删除掉。 使用DOM代码创建一个文档如下: QDocument 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); QString xml = doc.toString(); |
|