QDomDocument

Qt解析XML文件(QDomDocument)

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

转载

标签:

qt

qt解析xml

qtxml

qdomdocument

分类: Qt

    关于XML及其使用场景不在此多做介绍,今天主要介绍Qt中对于XML的解析。QtXml模块提供了一个读写XML文件的流,解析方法包含DOM和SAX,两者的区别是什么呢?

DOM(Document Object Model):将XML文件保存为树的形式,操作简单,便于访问。

SAX(Simple API for XML):接近于底层,速度较快,但不便于访问。

 

如果要使用XML时,需添加下行代码:

    #include

并在.pro文件中添加:

    QT += xml

   

Note that QXmlStream* classes are in QtCore,这句话是说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

        {

            QDomNode child_dom_node = child_list.item(j);

            QDomElement child_element = child_dom_node.toElement();

            QString child_tag_name = child_element.tagName();

            QString child__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();  

    }  

}  

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: QDomDocument.setContent()是Qt中的一个函数,用于将XML字符串解析为QDomDocument对象。它的作用是将XML字符串转换为QDomDocument对象,以便于对XML文档进行操作和处理。该函数的参数是一个QString类型的XML字符串,返回为bool类型,表示解析是否成功。如果解析成功,则返回true,否则返回false。 ### 回答2: QDomDocument::setContent是Qt中的一个方法,用于将XML文档加载到QDomDocument对象中。 QDomDocumentQt提供的用于操作XML文档的类,可以读取和修改XML文档的内容。setContent方法是其中的一个重要方法,用于将XML文档的内容加载到QDomDocument对象中进行解析和操作。 setContent方法接受一个XML文档的内容作为参数,可以是QString、QByteArray或QIODevice对象。它会根据传入的内容解析XML文档,并将解析后的结果保存在QDomDocument对象中,以便后续的处理。 在调用setContent方法后,可以通过QDomDocument提供的API来访问和修改XML文档的内容,例如获取节点、添加节点、修改节点的属性等等。 需要注意的是,setContent方法会根据解析的结果返回一个布尔,表示解析是否成功。如果解析成功,返回true;如果解析失败,返回false。所以在使用setContent方法后,需要检查解析的结果,并根据返回进行相应的处理。 总之,QDomDocument::setContent方法是Qt中用于加载XML文档的重要方法,通过它可以将XML文档的内容解析并保存在QDomDocument对象中,方便后续对XML文档进行访问和修改。 ### 回答3: QDomDocument.setContent() 是一个用于将 XML 数据加载到 QDomDocument 对象的方法。它接受一个参数,即要加载的 XML 数据。 使用 QDomDocument.setContent() 方法时,可以将一个包含 XML 数据的字符串传递给它。方法会为该对象创建一个文档树,根据提供的 XML 数据构建该树。 以下是使用 QDomDocument.setContent() 方法的示例代码: ```cpp QString xmlData = "<root>" "<element1>Value 1</element1>" "<element2>Value 2</element2>" "</root>"; QDomDocument doc; if(doc.setContent(xmlData)) { // XML 数据加载成功 // 遍历文档树、提取数据等操作 } else { // XML 数据加载失败 // 处理错误或异常情况 } ``` 在上述示例中,我们创建了一个包含 XML 数据的字符串 xmlData,并将其传递给 QDomDocument.setContent() 方法。该方法会将该字符串解析为一个 QDomDocument 对象中的文档树。 如果加载成功,可以对 QDomDocument 对象进行遍历操作,提取所需的数据。如果加载失败,可能是由于 XML 数据格式错误或其他原因,可以在 else 语句块中处理相应的错误或异常情况。 总结来说,QDomDocument.setContent() 方法用于将 XML 数据加载到 QDomDocument 对象中,使我们能够方便地对 XML 数据进行处理和操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值