//写xml的2个方式
**方式一 QXmlStreamWriter**
QFile file("C:/Users/Administrator/Desktop/test.xml");
if (!file.open(QIODevice::WriteOnly))
return;
QXmlStreamWriter stream(&file);
stream.setAutoFormatting(true); //设置自动格式,自动换行和缩进
stream.writeStartDocument(); //开始编写以xml版本号开头的文件
stream.writeStartElement("bookmark"); //创建开始元素标签并命名
stream.writeAttribute("href", "http://qt-project.org/"); //编写该元素属性
/*内容*/ //*这里写该元素内容,可以是新元素,也可以是文字元素,空白元素 *//
stream.writeTextElement("title", "Qt Project");
stream.writeStartElement("platform");
stream.writeStartElement("win");
stream.writeTextElement("name", "window10");
stream.writeTextElement("name1", "window11");
stream.writeEndElement();
stream.writeStartElement("mac");
stream.writeComment("hello mac"); //设置注释
stream.writeTextElement("name", "mac11.0");
stream.writeEndElement();
stream.writeEndElement();
stream.writeEndElement(); //结束对应元素标签
stream.writeEndDocument(); //结束xml文档的编写
file.close();
**/*输出*/**
<?xml version="1.0" encoding="UTF-8"?>
<bookmark href="http://qt-project.org/">
<title>Qt Project</title>
<platform>
<win>
<name>window10</name>
<name1>window11</name1>
</win>
<mac>
<!--hello mac-->
<name>mac11.0</name>
</mac>
</platform>
</bookmark>
**方式二 QDomDocument**
QFile file("C:/Users/Administrator/Desktop/test1.xml");
if (!file.open(QIODevice::WriteOnly))
return;
QDomDocument Doc;
Doc.setContent(&file);
QDomProcessingInstruction xmlInstruction = Doc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"");
Doc.appendChild(xmlInstruction); //为DOM结构添加元素
QDomElement root = Doc.createElement("MYML"); //创建标签盒子
root.setAttribute("platform", "none"); //设置盒子属性
Doc.appendChild(root);
QDomElement tag = Doc.createElement("Title"); //创建标签盒子
QDomText t = Doc.createTextNode("Qt Project"); //写入文字
QDomElement platform = Doc.createElement("platform");
tag.appendChild(t);
root.appendChild(tag);
root.appendChild(platform);
QDomElement win = Doc.createElement("win");
QDomElement mac = Doc.createElement("mac");
platform.appendChild(win);
platform.appendChild(mac);
QDomElement name1 = Doc.createElement("name");
QDomText value1 = Doc.createTextNode("window10");
win.appendChild(name1);
name1.appendChild(value1);
QDomElement name2 = Doc.createElement("name");
mac.appendChild(name2);
QDomText value2 = Doc.createTextNode("mac11.0");
name2.appendChild(value2);
QTextStream out_stream(&file);
Doc.save(out_stream, 4); //缩进4格
file.close();
**/*输出*/**
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<MYML platform="none">
<Title>Qt Project</Title>
<platform>
<win>
<name>window10</name>
</win>
<mac>
<name>mac11.0</name>
</mac>
</platform>
</MYML>
读xml
方式一接口
通过setDevice()设置好要处理的XML文件
reader.setDevice(&file);
通过readNext()挨个读入节点,
通过isStartElement()和isEndElement()判断是节点的开始和结束.
通过name()得到当前节点名字
通过readElementText()访问当前节点的内容
通过attributes()获取含有属性的节点的属性
(还没完善代码模块)
while (!reader.atEnd())
{
if (reader.isStartElement())
{
QTreeWidgetItem *item = new QTreeWidgetItem(parent);
item->setText(0, reader.name().toUtf8());
parent->addChild(item);
reader.readNext();
while (!reader.isStartElement()&&!reader.isEndElement())
{
reader.readNext();
}
if (reader.isStartElement())
{
readallelement(item);
}
}
else
{
reader.readNext();
}
方式二:
void xmltest::parseelement(const QDomElement &element, QTreeWidgetItem* parent)
{
QDomNode child = element.firstChild();
while (!child.isNull())
{
QDomElement e = child.toElement();
if (!e.isNull())
{
QTreeWidgetItem *item = new QTreeWidgetItem(parent);
item->setText(0, e.tagName());
parseelement(e,item);
}
child = child.nextSibling();
}
}