qt使用QDomDocument读写xml文件

在使用QDomDocument读写xml之前需要在工程文件添加:
QT += xml

1.生成xml文件

void createXml(QString xmlName)
{
	QFile file(xmlName);
    if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate |QIODevice::Text))
        return false;
    QDomDocument doc;
    QDomProcessingInstruction instruction; //添加处理命令
    instruction=doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\"");
    doc.appendChild(instruction);
/*

	
		98
	
	
		100
	

*/
	QDomElement root = doc.createElement("bookstore");
    doc.appendChild(root);

	QDomElement book = doc.createElement("book");
    book.setAttribute("category", "C++");	//生成category节点
    root.appendChild(book);
    QDomElement price= doc.createElement("price");
    book.appendChild(price);
    QDomText text = doc.createTextNode("98");
    price.appendChild(text);
	
	book = doc.createElement("book");
	book.setAttribute("category", QString::fromLocal8Bit("语文"));
    root.appendChild(book);
    price= doc.createElement("price");
    book.appendChild(price);
    text = doc.createTextNode("100");
    price.appendChild(text);
    
	QTextStream stream(&file);
	stream.setCodec("UTF_8");
	doc.save(stream,4,QDomNode::EncodingFromTextStream);
	file.close();
}

xml文件:
qt使用QDomDocument读写xml文件_第1张图片

2.读取xml文件

void loadXml(QString xmlName)
{
	QFile file(xmlName);
    if(!file.open(QFile::ReadOnly | QFile::Text))
    {
        return;
    }

    QString strError;
    int errorLine;
    int errorColumn;
    QDomDocument doc;
    if(!doc.setContent(&file, false, &strError, &errorLine, &errorColumn)){
        return;
    }
    QDomElement root = doc.documentElement();
    if(root.tagName() == "bookstore")
    {
		QDomNode book = root.firstChild();
		while(!book.isNull())
		{
			if(book.toElement().tagName() == "book")
			{
				QString str = book.toElement().attribute("category");	//获取category属性内容
				qDebug()<<str;
				QDomNode node = book.firstChild();
				while(!node.isNull())
				{
					if(node.toElement().tagName() == "price")
					{
						QString price = node.toElement().text();
						qDebug()<<price;
					}
					node = node.nextSibling();
				}
			}
			book = book.nextSibling();
		}
	}
}

读取结果:
在这里插入图片描述

你可能感兴趣的:(qt使用QDomDocument读写xml文件)