QDomDocument dom;
QFile *file = new QFile("books.xml");
if (file->open(QIODevice::ReadOnly))
{
dom.setContent(file); // 此處需做錯誤判斷
}
file->close();
// 以下代碼為解析XML文件中的內容
QDomNodeList books = dom.elementsByTagName("book");
for (int i = 0; i < books.count(); i++) {
QDomNode book = books.item(i);
if (book.toElement().attribute("ISBN") == isbn) { // 查找ISBN匹配的屬性,isbn由用戶指定
QDomNodeList attribs = book.toElement().childNodes();
QDomNode node;
QString attribNumber,attribContent;
for (int j = 0; j < attribs.count(); j++) {
node = attribs.item(j);
attribNumber = node.toElement().attribute("number");
attribContent = node.toElement().text();
//
在此可添加代碼對attribNumber,attribContent作出處理了.
}
break;
}
}
// 以下代碼為寫內容進XML文件
QStringList attribs = ""; // 由用戶指定
QDomElement bookNode = dom.createElement("book");
carNode.setAttribute("ISBN", isbn); // isbn由用戶指定
//此處開始處理attribs字符串列表中的內容
for (int i = 0; i < attribs.count(); i++) {
QString attribNumber = QString::number(i+1); // 內容的序號: 01 02 
if (i < 10)
attribNumber.prepend("0");
QDomText textNode = dom.createTextNode(attribs.at(i)); // 取出每一個字符串
QDomElement attribNode = dom.createElement("attrib");
attribNode.setAttribute("number", attribNumber);
attribNode.appendChild(textNode);
carNode.appendChild(attribNode); // 屬性結束
}
QDomNodeList archive = carDetails.elementsByTagName("archive");
archive.item(0).appendChild(carNode);
// 寫入XML文件中
if (file->open(QIODevice::WriteOnly)) {
QTextStream stream(file);
archive.item(0).save(stream, 4);
file->close();
}
<?xml version="1.0" encoding="gb2312" ?>
<archive>
<book ISBN="9787111267423">
<attrib number="01">書名:C++模板元編程(C++ 領域扛鼎之作,榮耀先生傾情翻譯,名著名譯)</attrib>
<attrib number="02">價格:55元</attrib>
<attrib number="03">作者:(美)David Abrahams;Aleksey Gurtovoy</attrib>
<attrib number="04">出版社:機械工業出版社</attrib>
<attrib number="05">出版日期:2010-01-01</attrib>
</book>
</archive>
posted on 2011-11-14 10:22
再生的雄鷹 閱讀(9213)
評論(1) 編輯 收藏 引用