zoukankan      html  css  js  c++  java
  • qt 解析XML

    QDomDocument parsing Example XML file <?xmlversion="1.0"encoding="UTF-8"?>
    <persons>
    <personid="1">
    <firstname>John</firstname>
    <surname>Doe</surname>
    <email>john.doe@example.com</email>
    <website>http://en.wikipedia.org/wiki/John_Doe</website>
    </person>
    <personid="2">
    <firstname>Jane</firstname>
    <surname>Doe</surname>
    <email>jane.doe@example.com</email>
    <website>http://en.wikipedia.org/wiki/John_Doe</website>
    </person>
    <personid="3">
    <firstname>Matti</firstname>
    <surname>Meikäläinen</surname>
    <email>matti.meikalainen@example.com</email>
    <website>http://fi.wikipedia.org/wiki/Matti_Meikäläinen</website>
    </person>
    </persons> Header file class QXSRExample :public QMainWindow
    {
    Q_OBJECT
     
    public:
    QXSRExample(QWidget *parent = 0);
    ~QXSRExample();
    private slots:
    void parseXML();
    private:
    QPointer<QVBoxLayout> _layout;
    void setupUI();
    void addPersonsToUI(QList< QMap<QString,QString>>& persons);
    };Source filevoid QXSRExample::parseXML(){
    /* We'll parse the example.xml */
    QFile* file =new QFile("C://example.xml");
    /* If we can't open it, let's show an error message. */
    if(!file->open(QIODevice::ReadOnly| QIODevice::Text)){
    QMessageBox::critical(this,
    "QXSRExample::parseXML",
    "Couldn't open example.xml",
    QMessageBox::Ok);
    return;
    }
     
    QList< QMap<QString,QString>> persons;
     
    /* QDomDocument takes any QIODevice. as well as QString buffer*/
    QDomDocument doc("mydocument");
    if(!doc.setContent(file))
    {
    return;
    }
     
    //Get the root element
    QDomElement docElem = doc.documentElement();
     
    // you could check the root tag name here if it matters
    QString rootTag = docElem.tagName();// == persons
     
    // get the node's interested in, this time only caring about person's
    QDomNodeList nodeList = docElem.elementsByTagName("person");
     
    //Check each node one by one.
    for(int ii =0;ii < nodeList.count(); ii++)
    {
    QMap<QString, QString> person;
     
    // get the current one as QDomElement
    QDomElement el = nodeList.at(ii).toElement();
     
    person["id"]= el.attribute("id");// get and set the attribute ID
     
    //get all data for the element, by looping through all child elements
    QDomNode pEntries = el.firstChild();
    while(!pEntries.isNull()){
    QDomElement peData = pEntries.toElement();
    QString tagNam = peData.tagName();
     
    if(tagNam =="firstname"){/* We've found first name. */
    person["firstname"]= peData.text();
    }elseif(tagNam =="surname"){/* We've found surname. */
    person["surname"]= peData.text();
    }elseif(tagNam =="email"){/* We've found email. */
    person["email"]= peData.text();
    }elseif(tagNam =="website"){/* We've found website. */
    person["website"]= peData.text();
    }
     
    pEntries = pEntries.nextSibling();
    }
     
    persons.append(person);
    }
     
    this->addPersonsToUI(persons);
    }

  • 相关阅读:
    利用同步网盘搭建个人或团队SVN服务器
    Entity FrameWork Code First 之 MVC4 数据库初始化策略用法
    Entity FrameWork Code First 迁移命令详解
    Bootstrap Paginator分页插件+ajax
    Bootstrap的js分页插件属性介绍
    AtomicBoolean介绍与使用
    java线程:Atomic(原子)
    Java里的CompareAndSet(CAS)
    ThreadLocal详解
    CalendarUtil 日期操作工具类
  • 原文地址:https://www.cnblogs.com/zzxap/p/2175689.html
Copyright © 2011-2022 走看看