什么是XML
什么是XML—详情
实例
用Qt实现xml的读写操作,以下图为例:
QDomDocument写XML文件
void Widget::writeXMLContents()
{
//写入xml
QFile file("../info.xml");
if (!file.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Truncate))
{
return;
}
QDomDocument doc;
QDomProcessingInstruction instruction;
instruction = doc.createProcessingInstruction("xml", "version = \"1.0\" encoding = \"UTF-8\"");
doc.appendChild(instruction); //写入文件头
QDomElement root = doc.createElement("bookStore");//根节点
doc.appendChild(root);
QDomElement node_book = doc.createElement("Book");//子节点
QDomAttr atr = doc.createAttribute("category");
atr.setValue(ui->lineEditCategory->text());
node_book.setAttributeNode(atr);//设置属性
QDomElement node_title = doc.createElement("Title");
QDomAttr atr2 = doc.createAttribute("lang");
atr2.setValue("en");
node_title.setAttributeNode(atr2);
QDomElement node_author = doc.createElement("Author");
QDomElement node_time = doc.createElement("Time");
QDomElement node_price = doc.createElement("Price");
node_title.appendChild(doc.createTextNode(ui->lineEditTitle->text()));
node_author.appendChild(doc.createTextNode(ui->lineEditAuthor->text()));
node_time.appendChild(doc.createTextNode(ui->lineEditTime->text()));
node_price.appendChild(doc.createTextNode(ui->lineEditPrice->text()));
node_book.appendChild(node_title);
node_book.appendChild(node_author);
node_book.appendChild(node_time);
node_book.appendChild(node_price);
root.appendChild(node_book);
QTextStream out(&file);
doc.save(out, 4);//写入文件 第二个参数为缩进
file.close();
}
QDomDocument读XML文件
void Widget::readXMLContents()
{
QFile file("../info.xml");
if (!file.open(QIODevice::ReadOnly|QIODevice::Text))
{
return;
}
QDomDocument doc; //xml格式文件
if (!doc.setContent(&file))
{
file.close();
return;
}
file.close();
QDomElement root = doc.documentElement(); //节点 bookstore
if (!root.isNull())
{
QDomNode node_book = root.firstChild(); //节点book
while (!node_book.isNull())
{
QDomElement element_book = node_book.toElement(); //QDomnode转成QDomElement
QString category = element_book.attributeNode("category").value();
ui->lineEditCategory->setText(category);
if (!element_book.isNull())
{
QDomElement node_Title = element_book.firstChildElement("Title"); //Title节点
if (!node_Title.isNull())
{
QString title = node_Title.text();
ui->lineEditTitle->setText(title);
}
QDomElement node_author = element_book.firstChildElement("Author"); //Author节点
if (!node_author.isNull())
{
QString author = node_author.text();
ui->lineEditAuthor->setText(author);
}
QDomElement node_time = element_book.firstChildElement("Time"); //Time节点
if (!node_time.isNull())
{
QString time = node_time.text();
ui->lineEditTime->setText(time);
}
QDomElement node_price = element_book.firstChildElement("Price"); //Flag节点
if (!node_price.isNull())
{
QString price = node_price.text();
ui->lineEditPrice->setText(price);
}
}
node_book = node_book.nextSibling(); //读取下一个book节点
}
}
}
结果
点击添加可以将数据存入xml文件,点击读取可以从xml文件中读取数据。
xml文件的内容