posts - 10,  comments - 2,  trackbacks - 0
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 再生的雄鹰 阅读(8436) 评论(1)  编辑 收藏 引用

FeedBack:
# re: [原创]Qt下XML文档的读、写(DOM方式)
2011-11-15 21:50 | ccsdu2009
看见这个都烦
为了解析一个xml写这么多太费时间了
还不如弄一个自动串行化的对象
  回复  更多评论
  

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2011年11月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

常用链接

留言簿(1)

随笔档案

文章分类

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜