The QDomDocument 類錶示 XML (可擴展標記語言) 文檔。 更多...
| 頭: | #include <QDomDocument> |
| qmake: | QT += xml |
| 繼承: | QDomNode |
注意: 此類的所有函數 可重入 除以下外:
| QDomDocument () | |
| QDomDocument (const QString & name ) | |
| QDomDocument (const QDomDocumentType & doctype ) | |
| QDomDocument (const QDomDocument & x ) | |
| ~QDomDocument () | |
| QDomAttr | createAttribute (const QString & name ) |
| QDomAttr | createAttributeNS (const QString & nsURI , const QString & qName ) |
| QDomCDATASection | createCDATASection (const QString & value ) |
| QDomComment | createComment (const QString & value ) |
| QDomDocumentFragment | createDocumentFragment () |
| QDomElement | createElement (const QString & tagName ) |
| QDomElement | createElementNS (const QString & nsURI , const QString & qName ) |
| QDomEntityReference | createEntityReference (const QString & name ) |
| QDomProcessingInstruction | createProcessingInstruction (const QString & target , const QString & data ) |
| QDomText | createTextNode (const QString & value ) |
| QDomDocumentType | doctype () const |
| QDomElement | documentElement () const |
| QDomElement | elementById (const QString & elementId ) |
| QDomNodeList | elementsByTagName (const QString & tagname ) const |
| QDomNodeList | elementsByTagNameNS (const QString & nsURI , const QString & localName ) |
| QDomImplementation | implementation () const |
| QDomNode | importNode (const QDomNode & importedNode , bool deep ) |
| QDomNode::NodeType | nodeType () const |
| bool | setContent (const QByteArray & data , bool namespaceProcessing , QString * errorMsg = Q_NULLPTR, int * errorLine = Q_NULLPTR, int * errorColumn = Q_NULLPTR) |
| bool | setContent (const QString & text , bool namespaceProcessing , QString * errorMsg = Q_NULLPTR, int * errorLine = Q_NULLPTR, int * errorColumn = Q_NULLPTR) |
| bool | setContent (QIODevice * dev , bool namespaceProcessing , QString * errorMsg = Q_NULLPTR, int * errorLine = Q_NULLPTR, int * errorColumn = Q_NULLPTR) |
| bool | setContent (QXmlInputSource * source , bool namespaceProcessing , QString * errorMsg = Q_NULLPTR, int * errorLine = Q_NULLPTR, int * errorColumn = Q_NULLPTR) |
| bool | setContent (const QByteArray & buffer , QString * errorMsg = Q_NULLPTR, int * errorLine = Q_NULLPTR, int * errorColumn = Q_NULLPTR) |
| bool | setContent (const QString & text , QString * errorMsg = Q_NULLPTR, int * errorLine = Q_NULLPTR, int * errorColumn = Q_NULLPTR) |
| bool | setContent (QIODevice * dev , QString * errorMsg = Q_NULLPTR, int * errorLine = Q_NULLPTR, int * errorColumn = Q_NULLPTR) |
| bool | setContent (QXmlInputSource * source , QXmlReader * reader , QString * errorMsg = Q_NULLPTR, int * errorLine = Q_NULLPTR, int * errorColumn = Q_NULLPTR) |
| QByteArray | toByteArray (int indent = 1) const |
| QString | toString (int indent = 1) const |
| QDomDocument & | operator= (const QDomDocument & x ) |
The QDomDocument 類錶示 XML (可擴展標記語言) 文檔。
The QDomDocument 類錶示整個 XML 文檔。概念上,它是文檔樹根,並提供對文檔數據的首要訪問。
由於元素、文本節點、注釋、處理指令、等不能存在於文檔上下文之外,因此文檔類還包含創建這些對象所需的工廠函數。創建的節點對象擁有 ownerDocument () 函數將它們與在其中創建它們的上下文文檔關聯。最常用的 DOM 類是 QDomNode , QDomDocument , QDomElement and QDomText .
經剖析的 XML 通過對象樹在內部錶示,可以使用各種 QDom 類訪問它們。所有 QDom 類隻 reference 對象在內部樹中。一旦 DOM 樹內部對象被刪除,最後引用它們的 QDom 對象或 QDomDocument 本身被刪除。
元素、文本節點、等的創建是使用此類中提供的各種工廠函數完成的。使用 QDom 類默認構造函數隻會導緻無法操縱或插入文檔的空對象。
The QDomDocument 類擁有用於創建文檔數據的幾個函數,例如 createElement (), createTextNode (), createComment (), createCDATASection (), createProcessingInstruction (), createAttribute () 和 createEntityReference ()。其中某些函數擁有支持名稱空間的版本,即 createElementNS () 和 createAttributeNS ()。 createDocumentFragment () 函數用於保持文檔部分;這對操縱復雜文檔很有用。
整個文檔內容的設置采用 setContent ()。此函數剖析作為 XML 文檔傳遞的字符串,並創建錶示文檔的 DOM 樹。根元素是可用的使用 documentElement ()。可以獲得文檔的正文錶示使用 toString ().
注意: DOM 樹可能最終預留大量內存,若 XML 文檔很大。對於這種文檔, QXmlStreamReader 或 QXmlQuery 類可能是更優解決方案。
它是可能的,將來自另一文檔的節點插入文檔使用 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(); // print out the element names of all elements that are direct children // of the outermost element. QDomElement docElem = doc.documentElement(); QDomNode n = docElem.firstChild(); while(!n.isNull()) { QDomElement e = n.toElement(); // try to convert the node to an element. if(!e.isNull()) { cout << qPrintable(e.tagName()) << endl; // the node really is an element. } n = n.nextSibling(); } // Here we append a new element to the end of the document QDomElement elem = doc.createElement("img"); elem.setAttribute("src", "myimage.png"); docElem.appendChild(elem);
一旦
doc
and
elem
超齣作用域,錶示 XML 文檔的整個內部樹就會被刪除。
要使用 DOM 創建文檔,所用代碼像這樣:
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); QString xml = doc.toString();
有關文檔對象模型的進一步信息,見 DOM (文檔對象模型) 級彆 1 and 級彆 2 核心 規範。
另請參閱 DOM 書簽範例 and 簡單 DOM 模型範例 .
構造空文檔。
創建文檔並將文檔類型名稱設為 name .
創建文檔采用文檔類型 doctype .
另請參閱 QDomImplementation::createDocumentType ().
構造副本為 x .
拷貝數據是共享的 (淺拷貝):修改一節點也會改變另一節點。若想要做深拷貝,使用 cloneNode ().
銷毀對象並釋放其資源。
創建新屬性稱為 name 可以插入元素,如:使用 QDomElement::setAttributeNode ().
若 name 不是有效 XML 名稱,此函數的行為被支配由 QDomImplementation::InvalidDataPolicy .
另請參閱 createAttributeNS ().
創建具有名稱空間支持,可以插入元素的新屬性。屬性名稱為 qName 和名稱空間 URI (統一資源標識符) 為 nsURI 。此特徵還設置 QDomNode::prefix () 和 QDomNode::localName () 為適當值 (從屬 qName ).
若 qName 不是有效 XML 名稱,此函數的行為被支配由 QDomImplementation::InvalidDataPolicy .
另請參閱 createAttribute ().
創建新 CDATA 區間為字符串 value 可以插入文檔,如:使用 QDomNode::appendChild ().
若 value 包含無法存儲在 CDATA 區間的字符,此函數的行為被支配由 QDomImplementation::InvalidDataPolicy .
另請參閱 QDomNode::appendChild (), QDomNode::insertBefore (),和 QDomNode::insertAfter ().
創建的新注釋為字符串 value 可以插入文檔,如:使用 QDomNode::appendChild ().
若 value 包含無法存儲於 XML 注釋中的字符,此函數的行為被支配由 QDomImplementation::InvalidDataPolicy .
另請參閱 QDomNode::appendChild (), QDomNode::insertBefore (),和 QDomNode::insertAfter ().
創建新的文檔片段,可以用於保持文檔的一部分,如:當對文檔樹做復雜操縱時。
創建的新元素稱為 tagName 可以插入 DOM 樹,如:使用 QDomNode::appendChild ().
若 tagName 不是有效 XML 名稱,此函數的行為被支配由 QDomImplementation::InvalidDataPolicy .
另請參閱 createElementNS (), QDomNode::appendChild (), QDomNode::insertBefore (),和 QDomNode::insertAfter ().
創建具有名稱空間支持的新元素,可以插入 DOM 樹。元素的名稱為 qName 和名稱空間 URI (統一資源標識符) 為 nsURI 。此特徵還設置 QDomNode::prefix () 和 QDomNode::localName () 為適當值 (從屬 qName ).
若 qName 為空字符串,返迴 null 元素不管無效數據策略是否有設置。
另請參閱 createElement ().
創建新實體引用稱為 name 可以插入文檔,如:使用 QDomNode::appendChild ().
若 name 不是有效 XML 名稱,此函數的行為被支配由 QDomImplementation::InvalidDataPolicy .
另請參閱 QDomNode::appendChild (), QDomNode::insertBefore (),和 QDomNode::insertAfter ().
創建可以插入文檔的新處理指令,如:使用 QDomNode::appendChild ()。此函數將處理指令目標設為 target 和數據到 data .
若 target 不是有效 XML 名稱,或數據若包含不可以齣現在處理指令中的字符,此函數的行為被支配由 QDomImplementation::InvalidDataPolicy .
另請參閱 QDomNode::appendChild (), QDomNode::insertBefore (),和 QDomNode::insertAfter ().
創建文本節點為字符串 value 可以插入文檔樹,如:使用 QDomNode::appendChild ().
若 value 包含不可以作為 XML 文檔字符數據存儲的字符 (即使按字符引用形式),此函數的行為被支配由 QDomImplementation::InvalidDataPolicy .
另請參閱 QDomNode::appendChild (), QDomNode::insertBefore (),和 QDomNode::insertAfter ().
返迴此文檔的文檔類型。
返迴文檔的根元素。
返迴的元素 ID 等於 elementId 。若未找到具有 ID 的元素,此函數返迴 null 元素 .
由於 QDomClasses 不知道哪些屬性是元素 ID,所以此函數始終返迴 null 元素 。這在未來版本中可能改變。
返迴 QDomNodeList ,包含文檔中的所有元素具有名稱 tagname 。節點列錶次序是以預順序遍曆元素樹時遇到它們的次序。
另請參閱 elementsByTagNameNS () 和 QDomElement::elementsByTagName ().
返迴 QDomNodeList ,包含文檔中的所有元素具有本地名稱 localName 和名稱空間 URI (統一資源標識符) 為 nsURI 。節點列錶次序是以預順序遍曆元素樹時遇到它們的次序。
另請參閱 elementsByTagName () 和 QDomElement::elementsByTagNameNS ().
返迴 QDomImplementation 對象。
導入節點 importedNode 從另一文檔到此文檔。 importedNode 仍然在原文檔中;此函數創建可在此文檔中使用的副本。
此函數返迴屬於此文檔的導入節點。返迴節點沒有父級。它是不可能的去導入 QDomDocument and QDomDocumentType 節點。在此情況下,該函數返迴 null 節點 .
若 importedNode 是 null 節點 ,返迴空節點。
若 deep 為 True,此函數不僅導入節點 importedNode 及其整個子樹;若它為 false,僅 importedNode 被導入。自變量 deep 不起作用對 QDomAttr and QDomEntityReference 節點,因為後代的 QDomAttr 節點始終被導入而那些 QDomEntityReference 節點從不被導入。
此函數行為稍有不同,根據節點類型:
| 節點類型 | 行為 |
|---|---|
| QDomAttr | owner 元素被設為 0 並將生成屬性中的指定標誌設為 true。整個子樹的 importedNode 始終為屬性節點導入: deep 不起作用。 |
| QDomDocument | 無法導入文檔節點。 |
| QDomDocumentFragment | 若 deep 為 True,此函數導入整個文檔片段;否則它僅生成空文檔片段。 |
| QDomDocumentType | 無法導入文檔類型節點。 |
| QDomElement | 屬性為 QDomAttr::specified () 為 true 也被導入,其它屬性不被導入。若 deep 為 True,此函數還導入子樹的 importedNode ;否則它隻導入元素節點 (和一些屬性,見上文)。 |
| QDomEntity | 實體節點可以導入,但目前沒有辦法使用它們,因為文檔類型在 DOM 級彆 2 中是隻讀的。 |
| QDomEntityReference | 實體引用節點的後代從不被導入: deep 不起作用。 |
| QDomNotation | 錶示法節點可以導入,但目前沒有辦法使用它們,因為文檔類型在 DOM 級彆 2 中是隻讀的。 |
| QDomProcessingInstruction | 處理指令的目標和值被拷貝到新節點。 |
| QDomText | 文本被拷貝到新節點。 |
| QDomCDATASection | 文本被拷貝到新節點。 |
| QDomComment | 文本被拷貝到新節點。 |
另請參閱 QDomElement::setAttribute (), QDomNode::insertBefore (), QDomNode::insertAfter (), QDomNode::replaceChild (), QDomNode::removeChild (),和 QDomNode::appendChild ().
返迴
DocumentNode
.
此函數剖析 XML 文檔從字節數組 data 並將它設為文檔內容。它試著按 XML 規範要求檢測文檔編碼。
若 namespaceProcessing 為 true,剖析器識彆 XML 文件中的名稱空間並將前綴名稱、本地名稱和名稱空間 URI 設為適當值。若 namespaceProcessing 為 false,剖析器不處理名稱空間當它讀取 XML 文件時。
若發生剖析錯誤,此函數返迴
false
且錯誤消息放置於
*
errorMsg
,行號在
*
errorLine
和列號在
*
errorColumn
(除非關聯指針被設為 0);否則此函數返迴
true
。各種錯誤消息的描述在
QXmlParseException
類文檔編製。注意:若想要嚮應用程序用戶顯示這些錯誤消息,將以英文顯示它們除非它們被明確翻譯。
若 namespaceProcessing 為 true,函數 QDomNode::prefix () 返迴所有元素和屬性的字符串。它返迴空字符串,若元素或屬性沒有前綴。
僅剝離由空白組成的文本節點,且不會齣現在 QDomDocument 。若不期望此行為,可以使用 setContent() 重載以允許 QXmlReader 要供給。
若 namespaceProcessing 為 false,函數 QDomNode::prefix (), QDomNode::localName () 和 QDomNode::namespaceURI () 返迴空字符串。
實體引用處理如下:
警告: 此函數不 可重入 .
另請參閱 QDomNode::namespaceURI (), QDomNode::localName (), QDomNode::prefix (), QString::isNull (),和 QString::isEmpty ().
這是重載函數。
此函數讀取 XML 文檔從字符串
text
,返迴 true 若內容被成功剖析;否則返迴
false
。由於
text
已經是 Unicode 字符串,不用做編碼檢測。
這是重載函數。
此函數讀取 XML 文檔從 IO 設備
dev
,返迴 true 若內容被成功剖析;否則返迴
false
.
這是重載函數。
此函數讀取 XML 文檔從
QXmlInputSource
source
,返迴 true 若內容被成功剖析;否則返迴
false
.
該函數在 Qt 4.5 引入。
這是重載函數。
此函數讀取 XML 文檔從字節數組 buffer ,返迴 true 若內容被成功剖析;否則返迴 false。
不履行名稱空間處理。
這是重載函數。
此函數讀取 XML 文檔從字符串
text
,返迴 true 若內容被成功剖析;否則返迴
false
。由於
text
已經是 Unicode 字符串,不用履行編碼檢測。
也不履行名稱空間處理。
這是重載函數。
此函數讀取 XML 文檔從 IO 設備
dev
,返迴 true 若內容被成功剖析;否則返迴
false
.
不履行名稱空間處理。
這是重載函數。
此函數讀取 XML 文檔從
QXmlInputSource
source
並剖析它采用
QXmlReader
reader
,返迴 true 若內容被成功剖析;否則返迴
false
.
此函數不改變特徵對於 reader 。若想要使用某些剖析特徵,可以使用此函數來設置適當讀取器。
另請參閱 QXmlSimpleReader .
將經剖析文檔轉換迴其正文錶示並返迴 QByteArray 包含編碼為 UTF-8 的數據。
此函數使用 indent 作為縮進子元素的空格數量。
另請參閱 toString ().
將經剖析文檔轉換迴其正文錶示。
此函數使用 indent 作為縮進子元素的空格數量。
若 indent 為 -1,根本不添加空白。
賦值 x 到此 DOM (文檔對象模型) 文檔。
拷貝數據是共享的 (淺拷貝):修改一節點也會改變另一節點。若想要做深拷貝,使用 cloneNode ().