zoukankan      html  css  js  c++  java
  • Qt中对QDomDocument和QDomnode的理解

    一.对QDomDocument和QDomnode的理解

    QDom前缀的都是代表节点类型。所以有,QDomElement代表一个Element节点,而QDomText代表一个Text节点。QDomNode类可以存储任意类型的节点。如果想进一步处理一个节点,首先必须把它转化为正确的数据类型。QDomNode调用toElement()以把它转化成QDomElement,然后调用tagName()来获得元素的标签名称。如果节点不是Element类型,那么toElement()函数就返回一个空QDomElement对象和一个空标签。

    二.几种操作:

    QFile file(filename);
     
    if(file.open(QFile::ReadOnly | QFile::Text)){
    std::cerr<<"Error:cannot read file"<<qPrintable(filename)<<":"<<qPrintable(file.errorString())<<std::endl;
    return false;
    }
    QString errorStr;
    int line;
    int errorColumn;
    QDomDocument doc;//定义一个dom文件
     
    if(!doc.setContent(&file,false,&line,&errorColumn))
    {
            std::cerr<<"error"<<endl;
    }
     
    QDomElement root = doc.docmentElement();
    if(root.tagName() != "book")
    {
       .....
    }

    (1) 对节点的操作

    节点操作:
    
    QDomNode child = QDomElement element.firstChild();
    
    while(!child.isNull())
    
    {
    
              if(child.toElement().tagName() == "myName")
    
              {
    
                              
    
               }
    
             child = child.nextSibling();
    
    }

    (2) XML文件与ini一样,xml通常用来进行软件配置

    Qt中实现对xml读写操作的类是QDomDocument相关的类,一般情况下需要包含下列三个头文件:

    #include <QFile>   
    #include <QtXmlQtXml>
    #include <QtXmlQDomDocument> 

    (3)写XML

    主要会用到下面的几个函数:

    QDomDocument doc;
    QDomProcessingInstruction instruction = doc.createProcessingInstruction("xml", "version="1.0" encoding="UTF-8"");
    doc.appendChild(instruction);
     
    QDomElement root = doc.createElement("HInfoData");//创建根节点
    doc.appendChild(root);//添加根节点
     
    QDomElement strMac = doc.createElement("Mac");//创建元素节点
    root.appendChild(strMac);//添加元素节点到根节点
    QDomText strMacNodeText = doc.createTextNode(data._strMac);//创建元素文本
    strMac.appendChild(strMacNodeText);//添加元素文本到元素节点

    (4)保存xim文件

    QFile file("./test.xml");
    if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text))
        return false;
    QTextStream out(&file);
    out.setCodec("UTF-8");
    doc.save(out, 4, QDomNode::EncodingFromTextStream);
    file.close();

    (5)读xml文件

    QDomDocument doc;
    QFile file("./test.xml");
    if (!file.open(QIODevice::ReadOnly))
    {
        return false;
    }
     
    if (!doc.setContent(&file)) 
    {
        file.close();
        return false;
    }
    file.close();
     
    
  • 相关阅读:
    三个心态做人做学问 沧海
    成功走职场要找准自己的"快捷键" 沧海
    免费离线下载 拂晓风起
    Hibernate 获取某个表全部记录时 奇怪现象 (重复出现某个记录) 拂晓风起
    无法读取mdb 如果连接不了ACCESS mdb文件,就尝试安装MDAC 拂晓风起
    Netbeans 使用 Hibernate 逆向工程 生成hbm和pojo 拂晓风起
    如何点击单选框 radio 后面的文字,选中单选框 拂晓风起
    Java 连接access 使用access文件 不用配置 拂晓风起
    mysql下如何执行sql脚本 拂晓风起
    Hibernate配置access Hibernate 连接 access 拂晓风起
  • 原文地址:https://www.cnblogs.com/mydomain/p/9837762.html
Copyright © 2011-2022 走看看