使用QXmlStreamWriter写XML文档
QXmlStreamWriter类为XML编写器提供了一个简单的流API,使用writeStartDocument()开始写文档,writeEndDocument()结束写文档。
使用WriteStarteElement()打开元素标记,后跟writeAttribute()或writeAttributes()、元素内容,然后使用writeEndElement()关闭元素。
使用writeTextElement()可用于写入只包含文本的元素。
使用writeCharacters()写元素内容
1.准备文件
QFile file("my.xml");
if (!file.open(QFile::WriteOnly | QFile::Text))
{
return;
}
2.准备QXmlStreamWriter 对象writeStream;
QXmlStreamWriter writeStream(&file);
3.设置标签缩进格式
writeStream.setAutoFormatting(true);
4.写XML文档
writeStream.writeStartDocument(); //开始写文档
writeStream.writeStartElement("bookmark"); //开始写元素
writeStream.writeAttribute("href","http://qt.nokia.com/"); //写元素属性
writeStream.writeTextElement("title","Qt Home"); //写只包含文本的元素
writeStream.writeTextElement("author", "wangwei");//写只包含文本的元素
//元素和元素内容分开写的方法
writeStream.writeStartElement("year");
writeStream.writeCharacters("2000");
writeStream.writeEndElement(); //end year
writeStream.writeEndElement(); //end bookmark
writeStream.writeEndDocument(); //结束写文档
5.关闭文件
file.close();
使用QXmlStreamReader读XML文档
QXmlStreamReader类提供了一个快速解析器,用于通过简单的流API读取格式良好的XML文档。
使用QXmlStreamReader,应用程序根据需要从读取器中一个接一个地提取标记。这是通过调用readNext()完成的,读取器从输入流中读取,直到完成下一个标记,然后返回TokenType。根据不同的TokenType,解析不同的内容。
1.准备要读取的XML文档
QFile file("my.xml");
if (!file.open(QFile::ReadOnly | QFile::Text))
{
return;
}
2.准备QXmlStreamReader对象readStream
QXmlStreamReader readStream(&file);
//或使用以下方式
QXmlStreamReader readStream;
readStream.setDevice(&file);
3.读XML文件
while (!readStream.atEnd())
{
//提取标记
QXmlStreamReader::TokenType type = readStream.readNext();
//根据不同的标记类型,分别处理
if (type == QXmlStreamReader::StartDocument)
{
ui.listWidget->addItem(readStream.documentEncoding().toString());
ui.listWidget->addItem(readStream.documentVersion().toString());
}
if (type == QXmlStreamReader::StartElement)
{
ui.listWidget->addItem(readStream.name().toString());
if (readStream.attributes().hasAttribute("href"))
{
ui.listWidget->addItem(readStream.attributes().value("href").toString());
}
}
if (type == QXmlStreamReader::EndElement)
{
ui.listWidget->addItem(readStream.name().toString());
}
if (type == QXmlStreamReader::Characters && !readStream.isWhitespace())
{
ui.listWidget->addItem(readStream.text().toString());
}
}
//读文件出错
if (readStream.hasError()) {
ui.listWidget->addItem(readStream.errorString());
}
4.关闭文件
file.close();