Home · All Classes · Modules  · QSS HELP  · QSS 案例 · VER007 HOME

QDomDocument Class Reference
[QtXml module]

该QDomDocument类表示XML文档。More...

继承QDomNode

Methods


Detailed Description

该QDomDocument类表示XML文档。

该QDomDocument类代表整个XML文档。从概念上讲,它是文档树的根,并提供主要访问到文档的数据。

由于元素,文本节点,注释,处理指令等,不能在文档的上下文之外存在,文件类还包含创建这些对象所需的工厂函数。创建节点对象有一个ownerDocument( )函数并将它们与在文档的背景下,他们创建的。将使用DOM类最经常是QDomNode, QDomDocument ,QDomElementQDomText

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

完成创作元素,文本节点等的使用在这个类中提供的各种工厂的功能。使用QDom类的默认构造函数只会造成无法操纵或插入到文档中的空对象。

该QDomDocument类有多种功能,用于创建文件的数据,例如,createElement( )createTextNode( )createComment( )createCDATASection( )createProcessingInstruction( )createAttribute()和createEntityReference( ) 。其中的一些功能有支持命名空间的版本,即createElementNS()和createAttributeNS( ) 。该createDocumentFragment()函数是用于保存文件的部分,这是用于操作复杂的文件是有用的。

该文件的整个内容设置与setContent( ) 。这个函数解析它通过为XML文档的字符串,并创建DOM树,代表该文件。使用根元素可用documentElement( ) 。可使用获得的文件的文字表述toString( ) 。

Note:DOM树可能最终保留了大量的内存,如果XML文档是很大的。对于大的XML文档,QXmlStreamReaderQXmlQuery类可能是更好的解决方案。

它可以使用插入来自另一个文档中的节点插入到文档中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);

一旦docelem走出去的范围,表示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 )Level 1Level 2 Core规格。


Method Documentation

QDomDocument.__init__ (self)

构造一个空文档。

QDomDocument.__init__ (self, QString name)

创建文档并设置文档类型的名称name

QDomDocument.__init__ (self, QDomDocumentType doctype)

创建具有文档类型的文档doctype

See also QDomImplementation.createDocumentType( ) 。

QDomDocument.__init__ (self, QDomDocument x)

构造的副本x

副本的数据是共享的(浅拷贝) :修改一个节点也将改变其他。如果你想使一个深拷贝,使用cloneNode( ) 。

QDomAttr QDomDocument.createAttribute (self, QString name)

创建一个名为新的属性name该可插入一个元素,例如运用QDomElement.setAttributeNode( ) 。

If name是不是一个有效的XML名称,这个函数的行为受约束QDomImplementation.InvalidDataPolicy

See also createAttributeNS( ) 。

QDomAttr QDomDocument.createAttributeNS (self, QString nsURI, QString qName)

创建一个具有可插入一个元素的命名空间支持一个新的属性。该属性的名称是qName和命名空间URI为nsURI。该功能还将QDomNode.prefix()和QDomNode.localName( )为适当的值(取决于qName) 。

If qName是不是一个有效的XML名称,这个函数的行为受约束QDomImplementation.InvalidDataPolicy

See also createAttribute( ) 。

QDomCDATASection QDomDocument.createCDATASection (self, QString data)

创建字符串一个新的CDATA节value能够被插入到文档中,例如运用QDomNode.appendChild( ) 。

If value包含不能被存储在一个CDATA节的字符,这个函数的行为受约束QDomImplementation.InvalidDataPolicy

See also QDomNode.appendChild( )QDomNode.insertBefore()和QDomNode.insertAfter( ) 。

QDomComment QDomDocument.createComment (self, QString data)

创建字符串新评论value能够被插入到文档中,例如运用QDomNode.appendChild( ) 。

If value包含不能被存储在XML注释字符,这个函数的行为受约束QDomImplementation.InvalidDataPolicy

See also QDomNode.appendChild( )QDomNode.insertBefore()和QDomNode.insertAfter( ) 。

QDomDocumentFragment QDomDocument.createDocumentFragment (self)

创建一个新的文档片段,可用于保存文件的部分,例如做文档树的复杂的操作时。

QDomElement QDomDocument.createElement (self, QString tagName)

创建一个名为新元素tagName能够被插入到DOM树中,例如运用QDomNode.appendChild( ) 。

If tagName是不是一个有效的XML名称,这个函数的行为受约束QDomImplementation.InvalidDataPolicy

QDomNode.insertAfter( )

See also createElementNS( )QDomNode.appendChild()和QDomNode.insertBefore( ) 。

QDomElement QDomDocument.createElementNS (self, QString nsURI, QString qName)

创建一个具有可插入到DOM树中的命名空间支持的新元素。元素的名称是qName和命名空间URI为nsURI。该功能还将QDomNode.prefix()和QDomNode.localName( )为适当的值(取决于qName) 。

If qName是一个空字符串,返回一个空元素不管无效的数据策略是否被设置。

See also createElement( ) 。

QDomEntityReference QDomDocument.createEntityReference (self, QString name)

创建一个名为一个新的实体引用name能够被插入到文档中,例如运用QDomNode.appendChild( ) 。

If name是不是一个有效的XML名称,这个函数的行为受约束QDomImplementation.InvalidDataPolicy

See also QDomNode.appendChild( )QDomNode.insertBefore()和QDomNode.insertAfter( ) 。

QDomProcessingInstruction QDomDocument.createProcessingInstruction (self, QString target, QString data)

创建一个新的处理指令可以被插入到文档中,例如运用QDomNode.appendChild( ) 。此功能设置为处理指令的目标target以及将数据data

If target是不是一个有效的XML名称,或者数据,如果包含不能出现在一个处理指令字符,这个函数的行为受约束QDomImplementation.InvalidDataPolicy

See also QDomNode.appendChild( )QDomNode.insertBefore()和QDomNode.insertAfter( ) 。

QDomText QDomDocument.createTextNode (self, QString data)

创建字符串的文本节点value能够被插入到文档树,例如运用QDomNode.appendChild( ) 。

If value包含不能被保存为一个XML文档(即使在字符引用的形式)的字符数据的字符,这个函数的行为受约束QDomImplementation.InvalidDataPolicy

See also QDomNode.appendChild( )QDomNode.insertBefore()和QDomNode.insertAfter( ) 。

QDomDocumentType QDomDocument.doctype (self)

返回此文件的文件类型。

QDomElement QDomDocument.documentElement (self)

返回文档的根元素。

QDomElement QDomDocument.elementById (self, QString elementId)

返回其ID等于元件elementId。如果被发现与ID号的元素,这个函数返回一个null element

由于QDomClasses不知道哪个属性是元素的ID ,这个函数返回一个永远null element。这可能会改变在未来的版本。

QDomNodeList QDomDocument.elementsByTagName (self, QString tagname)

返回QDomNodeList,包含所有文件中的名称元素tagname。节点列表的顺序是它们在元素树的先序遍历出现的顺序。

See also elementsByTagNameNS()和QDomElement.elementsByTagName( ) 。

QDomNodeList QDomDocument.elementsByTagNameNS (self, QString nsURI, QString localName)

返回QDomNodeList包含所有的文件与本地名称的元素localName和命名空间的URInsURI。节点列表的顺序是它们在元素树的先序遍历出现的顺序。

See also elementsByTagName()和QDomElement.elementsByTagNameNS( ) 。

QDomImplementation QDomDocument.implementation (self)

返回QDomImplementation对象。

QDomNode QDomDocument.importNode (self, QDomNode importedNode, bool deep)

进口的节点importedNode从另一个文件于本文件。importedNode仍然在原始文档中,该函数创建一个可以在此文档中使用的副本。

该函数返回输入节点属于这个文件。返回的节点没有父。这是不可能的导入QDomDocumentQDomDocumentType节点。在这种情况下,该函数返回一个null node

If deep诚然,这个功能的进口不仅节点importedNode但它的整个子树,如果它是假的,只有importedNode是进口的。这个论点deep有对无影响QDomAttrQDomEntityReference节点,因为的后代QDomAttr节点总是进口和那些QDomEntityReference节点永远不会进口。

此函数的行为是稍有不同,这取决于节点类型:

Node Type Behavior
QDomAttr The owner element is set to 0 and the specified flag is set to true in the generated attribute. The whole subtree of importedNode is always imported for attribute nodes: deep has no effect.
QDomDocument Document nodes cannot be imported.
QDomDocumentFragment If deep is true, this function imports the whole document fragment; otherwise it only generates an empty document fragment.
QDomDocumentType Document type nodes cannot be imported.
QDomElement Attributes for which QDomAttr.specified() is true are also imported, other attributes are not imported. If deep is true, this function also imports the subtree of importedNode; otherwise it imports only the element node (and some attributes, see above).
QDomEntity Entity nodes can be imported, but at the moment there is no way to use them since the document type is read-only in DOM level 2.
QDomEntityReference Descendants of entity reference nodes are never imported: deep has no effect.
QDomNotation Notation nodes can be imported, but at the moment there is no way to use them since the document type is read-only in DOM level 2.
QDomProcessingInstruction The target and value of the processing instruction is copied to the new node.
QDomText The text is copied to the new node.
QDomCDATASection The text is copied to the new node.
QDomComment The text is copied to the new node.

QDomNode.insertAfter( )QDomNode.replaceChild( )QDomNode.removeChild( )QDomNode.appendChild( )

See also QDomElement.setAttribute()和QDomNode.insertBefore( ) 。

QDomNode.NodeType QDomDocument.nodeType (self)

Returns DocumentNode

(bool, QString errorMsg, int errorLine, int errorColumn) QDomDocument.setContent (self, QByteArray data, bool namespaceProcessing)

该函数从字节数组解析XML文档data并且将其设置为文件的内容。它会尝试检测文件的编码所要求的XML规范。

If namespaceProcessing诚然,解析器识别命名空间的XML文件中,并设置前缀名,本地名称和命名空间URI为适当的值。如果namespaceProcessing是假的,解析器确实没有命名空间的处理时,它读取XML文件。

如果出现语法错误,这个函数返回False ,并且错误信息被放置在*errorMsg中的行号*errorLine并且在列号*errorColumn(除非相关指针设置为0 ) ,否则该函数返回True。各种错误信息的描述QXmlParseException类文档。需要注意的是,如果你想显示这些错误信息到您的应用程序的用户,他们将,除非他们明确地翻译英文显示。

If namespaceProcessing为真时,函数QDomNode.prefix( )返回一个字符串的所有元素和属性。它返回一个空字符串,如果该元素或属性没有前缀。

空白只包括文本节点被剥离,而不会出现在QDomDocument。如果这种行为是不是需要,可以使用使用setContent ()重载,允许QXmlReader要被提供。

If namespaceProcessing是假的,功能QDomNode.prefix( )QDomNode.localName()和QDomNode.namespaceURI( )返回一个空字符串。

实体引用的处理方式如下:

QDomNode.prefix( )QString.isNull( )QString.isEmpty( )

Warning:此功能不reentrant

See also QDomNode.namespaceURI()和QDomNode.localName( ) 。

(bool, QString errorMsg, int errorLine, int errorColumn) QDomDocument.setContent (self, QString text, bool namespaceProcessing)

这是一个重载函数。

该函数从字符串读取XML文档text,返回True,如果内容被成功解析,否则返回False 。自text已经是一个Unicode字符串,没有编码检测完成。

(bool, QString errorMsg, int errorLine, int errorColumn) QDomDocument.setContent (self, QIODevice dev, bool namespaceProcessing)

这是一个重载函数。

该函数读取从IO设备的XML文档dev,返回True,如果内容被成功解析,否则返回False 。

(bool, QString errorMsg, int errorLine, int errorColumn) QDomDocument.setContent (self, QXmlInputSource source, bool namespaceProcessing)

这是一个重载函数。

该函数从XML文档QXmlInputSource source,返回True,如果内容被成功解析,否则返回False 。

此功能被引入Qt的4.5 。

(bool, QString errorMsg, int errorLine, int errorColumn) QDomDocument.setContent (self, QByteArray buffer)

这是一个重载函数。

该函数从字符串读取XML文档text,返回True,如果内容被成功解析,否则返回False 。自text已经是一个Unicode字符串,不进行任何编码检测。

不执行任何命名空间的处理要么。

(bool, QString errorMsg, int errorLine, int errorColumn) QDomDocument.setContent (self, QString text)

这是一个重载函数。

该函数读取从字节数组的XML文档buffer,返回True,如果内容被成功解析,否则返回False 。

不执行任何命名空间的处理。

(bool, QString errorMsg, int errorLine, int errorColumn) QDomDocument.setContent (self, QIODevice dev)

这是一个重载函数。

该函数读取从IO设备的XML文档dev,返回True,如果内容被成功解析,否则返回False 。

不执行任何命名空间的处理。

(bool, QString errorMsg, int errorLine, int errorColumn) QDomDocument.setContent (self, QXmlInputSource source, QXmlReader reader)

这是一个重载函数。

该函数从XML文档QXmlInputSource source并与解析它QXmlReader reader,返回True,如果内容被成功解析,否则返回False 。

此功能不会改变的特点reader。如果你想使用某些功能解析您可以使用此功能来设立适当的读者。

See also QXmlSimpleReader

QByteArray QDomDocument.toByteArray (self, int indent = 1)

解析后的文档转换回其文字表述,并返回一个QByteArray含有编码为UTF- 8的数据。

此函数使用indent由于空间的子元素缩进量。

See also toString( ) 。

QString QDomDocument.toString (self, int indent = 1)

解析后的文档转换回其文字表述。

此函数使用indent由于空间的子元素缩进量。

If indent为-1 ,任何空白都被添加。




PyQt 4.10.3 for X11 Copyright © Riverbank Computing Ltd and Nokia 2012 Qt 4.8.5