qt xml解析

Qt解析XML文件(QDomDocument)

(2013-08-02 22:25:27)
标签:

qt

qt解析xml

qtxml

qdomdocument

分类:Qt
 
  关于XML及其使用场景不在此多做介绍,今天主要介绍Qt中对于XML的解析。 QtXml模块提供了一个读写XML文件的流,解析方法包含DOM和SAX, 两者的区别是什么呢?
DOM(Document ObjectModel):将XML文件保存为树的形式, 操作简单, 便于访问。
SAX(Simple APIfor XML):接近于底层,速度较快,但不便于访问。

如果要使用XML时,需添加下行代码:
    #include
并在.pro文件中添加:
    QT += xml
   
Note that QXmlStream* classes are inQtCore,这句话是说QXmlStreamReader和QXmlStreamWriter不在模块QtXml中,而是在QtCore中,该模块只涉及DOM和SAX基于XML的接口。

此模块中包含的类不再多作介绍,详情请查看: http://qt-project.org/doc/qt-4.8/qtxml.html

例子:

person.xml文件如下所示:
Qt解析XML文件(QDomDocument)
解析方法:
void ParseXML::parse(QString file_name) 
{  
    if(file_name.isEmpty()) 
        return;  
   
    QFile file(file_name); 
    if(!file.open(QFile::ReadOnly | QFile::Text))
   
        QMessageBox::information(NULL, QString("title"),QString("open error!"));

        return;  
   
   
    QDomDocument document; 
    QString error; 
    int row = 0, column = 0; 
    if(!document.setContent(&file, false, &error, &row,&column))
   
        QMessageBox::information(NULL, QString("title"),QString("parse file failed at line row and column") +QString::number(row, 10) + QString(",") + QString::number(column,10));

        return;  
   
   
    if(document.isNull())
   
        QMessageBox::information(NULL, QString("title"),QString("document is null!"));
         
        return;  
   
   
    QDomElement root =document.documentElement();  

    //root_tag_name为persons
    QString root_tag_name =root.tagName();
    if(root.hasAttribute("name"))
    {
        //name为Qt
        QString name =root.attributeNode("name").value(); 
    }
       
    //获取id="1"的节点
    QDomElement person =root.firstChildElement();  
    if(person.isNull()) 
        return; 

    QString person_tag_name= person.tagName();

    //id为1
    QString id =person.attributeNode("id").value();

    //获取子节点,数目为2
    QDomNodeList list =root.childNodes();
    int count =list.count();
    for(int i=0; i
    {
        QDomNode dom_node = list.item(i);
        QDomElement element =dom_node.toElement();

        //获取id值,等价
        QString id_1 =element.attributeNode("id").value(); 
        QString id_2 = element.attribute("id");

        //获取子节点,数目为4,包括:name、age、email、website
        QDomNodeList child_list =element.childNodes();
        int child_count = child_list.count();
        for(int j=0; j
        {
            QDomNodechild_dom_node = child_list.item(j);
            QDomElement child_element = child_dom_node.toElement();
            QStringchild_tag_name = child_element.tagName();
            QStringchild__tag_value = child_element.text();
        }
    }

    //按照name、age、email、website的顺序获取值
    QDomElement element =person.firstChildElement();  
    while(!element.isNull())
   
        QString tag_name = element.tagName();
        QString tag_value = element.text();
        element = element.nextSiblingElement(); 
   
}  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值