目录
头文件
qmake: QT += xmlHeader: #include<QDomDocument>
QDomDocument --> xml文件指针
关联文件
QFile file(filePath);
file.open(QIODevice::WriteOnly);
QDomDocument doc;
doc.setContent(&file);
XML文件的写入
(1)创建xml文档格式头
QDomProcessingInstruction ins;
ins = doc.createProcessingInstruction("xml", "version = \'1.0\' encoding=\'utf-8\'");
(2)创建根节点元素标签
QDomElement root = doc.createElement("tagname");
doc.appendChild(root);
(3)创建子节点元素标签
QDomElement dateEmt = doc.createElement("childTagName");
root.appendChild(dateEmt);
(4)设置标签属性
QDomElement dateEmt = doc.createElement("cim:Company");
//创建属性名
QDomAttr dateAttr = doc.createAttribute("属性名");
dateAttr.setNodeValue("属性内容”);dateEmt.setAttributeNode(dateAttr); //设置标签属性
(5)设置标签内容
QDomText text = doc.createTextNode("xxx");
dateEmt.appendChild(text);
(6)保存xml文件
QTextStream stream(&file);
doc.save(stream, 4); //参数2为 标签的tab缩进值
XML文件的解析
(1)查找具体标记名的所有节点元素
QDomNodeList nodeList = doc.elementsByTagName("标签名")
(2) QDomNodeList类介绍
QDomNodeList类是QDomNode对象的列表。
Header:
#include <QDomNodeList>
qmake:
QT += xml
- 所有成员的列表,包括继承的成员
Note: All functions in this class are reentrant.
Public Functions
QDomNodeList(const QDomNodeList &n)
QDomNode
at(int index) const
int
count() const
bool
isEmpty() const
QDomNode
item(int index) const
int
length() const
int
size() const
bool
operator!=(const QDomNodeList &n) const
QDomNodeList &
operator=(const QDomNodeList &n)
bool
operator==(const QDomNodeList &n) const
QDomNodeList类是QDomNode对象的列表。
列表可以通过QDomDocument::elementsByTagName()和QDomNode::childNodes()获得。文档对象模型(DOM)要求这些列表是“活动的”:每当您更改基础文档时,列表的内容都会得到更新。
可以使用item()从列表中获取特定节点。列表中的项数由length()返回
(3)QDomNode类方法
QDomNode()
QDomNode(const QDomNode &n)
QDomNode
appendChild(const QDomNode &newChild)
QDomNamedNodeMap
attributes() const
QDomNodeList
childNodes() const
void
clear()
QDomNode
cloneNode(bool deep = true) const
int
columnNumber() const
QDomNode
firstChild() const
QDomElement
firstChildElement(const QString &tagName = QString()) const
bool
hasAttributes() const
bool
hasChildNodes() const
QDomNode
insertAfter(const QDomNode &newChild, const QDomNode &refChild)
QDomNode
insertBefore(const QDomNode &newChild, const QDomNode &refChild)
bool
isAttr() const
bool
isCDATASection() const
bool
isCharacterData() const
bool
isComment() const
bool
isDocument() const
bool
isDocumentFragment() const
bool
isDocumentType() const
bool
isElement() const
bool
isEntity() const
bool
isEntityReference() const
bool
isNotation() const
bool
isNull() const
bool
isProcessingInstruction() const
bool
isSupported(const QString &feature, const QString &version) const
bool
isText() const
QDomNode
lastChild() const
QDomElement
lastChildElement(const QString &tagName = QString()) const
int
lineNumber() const
QString
localName() const
QDomNode
namedItem(const QString &name) const
QString
namespaceURI() const
QDomNode
nextSibling() const
QDomElement
nextSiblingElement(const QString &tagName = QString()) const
QString
nodeName() const
NodeType
nodeType() const
QString
nodeValue() const
void
QDomDocument
ownerDocument() const
QDomNode
parentNode() const
QString
prefix() const
QDomNode
previousSibling() const
QDomElement
previousSiblingElement(const QString &tagName = QString()) const
QDomNode
removeChild(const QDomNode &oldChild)
QDomNode
replaceChild(const QDomNode &newChild, const QDomNode &oldChild)
void
save(QTextStream &stream, int indent, EncodingPolicy encodingPolicy = QDomNode::EncodingFromDocument) const
void
setNodeValue(const QString &v)
void
setPrefix(const QString &pre)
QDomAttr
toAttr() const
QDomCDATASection
toCDATASection() const
QDomCharacterData
toCharacterData() const
QDomComment
toComment() const
QDomDocument
toDocument() const
QDomDocumentFragment
toDocumentFragment() const
QDomDocumentType
toDocumentType() const
QDomElement
toElement() const
QDomEntity
toEntity() const
QDomEntityReference
toEntityReference() const
QDomNotation
toNotation() const
QDomProcessingInstruction
toProcessingInstruction() const
QDomText
toText() const
bool
operator!=(const QDomNode &n) const
QDomNode &
operator=(const QDomNode &n)
bool
operator==(const QDomNode &n) const
(4)遍历节点
使用firstChild()获取节点的第一个子节点(如果有),并使用nextSibling()进行遍历。
(5) QDomElement 与 QDomNode
我的理解 : QDomElement和QDomNode都是节点,不同在于QDomElement是单独的节点(即当没有子标签时),可以使用 tagName()和text()方法获得节点的名称和内容。 QDomNode 可以使用 toElement()转化为QDomElement类型
(6)获取QDomNode属性值的两种方法
QDomNode node;
① QString value = node.attributes().namedItem("属性名").nodeValue()
② QString value = QDomElement elem = node.toElement().attribute( "属性名" );