QDomDocument類


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();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM