对xml使用QDomDocument进行读写发生的错误

首先,你切记要在 ,pro 文件中,加入 QT += xml ,不然你就会出现这个错误:
NK2019: 无法解析的外部符号 “__declspec(dllimport) public: __cdecl QDomElement::~QDomElement(void)” (_ imp ??1QDomElement@@QEAA@XZ),该符号在函数 “void __cdecl WriteXml(void)” (?WriteXml@@YAXXZ) 中被引用()
当然如果出现这个错误,也有可能不是这个问题,那么就请你参考这个人写的:
https://blog.csdn.net/ygzhong000/article/details/44843371

对xml文件使用QDomDocument进行解析

code :

void ReadXml()
    //打开或创建文件
    QFile file("mytest.xml"); //相对路径、绝对路径、资源路径都行
    if(!file.open(QFile::ReadOnly))
        return;
    QDomDocument doc;
    if(!doc.setContent(&file))
        file.close();
        return;
    file.close();
    QDomElement root=doc.documentElement(); //返回根节点
    qDebug()<<root.nodeName();
    QDomElement nodeElement=root.firstChildElement(); //获得第一个子节点
    while(!nodeElement.isNull()){
        qDebug()<<nodeElement.nodeName()<<nodeElement.attribute ("Name")<<nodeElement.attribute ("Age")<<nodeElement.attribute ("English")<<nodeElement.attribute ("Math");
        //不能用qPrintable,会无法显示中文
        nodeElement=nodeElement.nextSiblingElement();
//    while(!node.isNull())  //如果节点不空
//    {
//        if(node.isElement()) //如果节点是元素
//        {
//            QDomElement e=node.toElement(); //转换为元素,注意元素和节点是两个数据结构,其实差不多
//            qDebug()<<e.tagName()<<" "<<e.attribute("id")<<" "<<e.attribute("time"); //打印键值对,tagName和nodeName是一个东西
//            QDomNodeList list=e.childNodes();
//            for(int i=0;i<list.count();i++) //遍历子元素,count和size都可以用,可用于标签数计数
//            {
//                QDomNode n=list.at(i);
//                if(node.isElement())
//                    qDebug()<<n.nodeName()<<":"<<n.toElement().text();
//            }
//        }
//        node=node.nextSibling(); //下一个兄弟节点,nextSiblingElement()是下一个兄弟元素,都差不多
//    }

里面很多注释的代码是用于有子节点的,我待会会把文件给出。但应该大部分用我写的那个就可以了。就可以全部遍历到了。

将xml文件,用QTableView进行显示

code:

QFile file("mytest.xml"); //相对路径、绝对路径、资源路径都行
    if(!file.open(QFile::ReadOnly))
        //return;
    QDomDocument doc;
    if(!doc.setContent(&file))
        file.close();
       // return;
    file.close();
    QDomElement root=doc.documentElement(); //返回根节点
    qDebug()<<root.nodeName();
    QDomElement nodeElement=root.firstChildElement(); //获得第一个子节点
    QStandardItemModel* model = new QStandardItemModel(this);
    model->setColumnCount(3);
    model->setRowCount(3);
    QStringList list;
    list<<"name"<<"english"<<"math";
    model->setHorizontalHeaderLabels(list);
    for(int i=0;!nodeElement.isNull();i++){
       model->setData(model->index(i,0),nodeElement.attribute ("Name"));
       model->setData(model->index(i,1),nodeElement.attribute ("English"));
       model->setData(model->index(i,2),nodeElement.attribute ("Math"));
//         model->setData(i, 0, new QStandardItem(nodeElement.nodeName()));
//         model->setItem(i, 1, new QStandardItem(nodeElement.attribute ("Name")));
//         model->setItem(i, 2, new QStandardItem(nodeElement.attribute ("English")));
//         model->setItem(i,3, new QStandardItem(nodeElement.attribute ("Math")));
       nodeElement=nodeElement.nextSiblingElement();
//     model->setItem(0, 0, new QStandardItem("zhangsan"));
//     model->setItem(0, 1, new QStandardItem("3"));
//     model->setItem(0, 2, new QStandardItem("man"));
       this->setModel(model);

这样就可以实现了。代码我就上传了,可以运行的。

代码如下:
Code
若后面分数变得较高,积分不够的话,可以私信我,我会发给你的。

  1. Qt中使用QDomDocument读写XML文件
  2. Qt5 error LNK2019 无法解析的外部符号 解决办法
  3. Qt5 对xml文件常用的操作(读写,增删改查)
本篇文章是对b站学习视频上面的一些总结与笔记,觉得这个视频还是不错的,值得花时间去听,那样才能更好的打好基础。共勉!这里也贴上一个这个视频的文档资料:https://pan.baidu.com/s/1x8dT6xorLa0jaNe8Wdd0IQ 提取码:8sdy目录对xml使用QDomDocument进行读写对xml使用QDomDocument进行读写首先,你切记要在,pro文件中,加入 QT += xml,不然你就会出现这个错误:NK2019: 无法解析的外部符号 “__declspec(dlli
本功能比较常用,就是读取一个本地的xml文件,然后将内容显示到界面上的表格当中即可。 当然了,你还可以利用这个功能,进行其他的操作,譬如,根据xml的节点文本创建动态组态软件控件,就是动态new 控件,根据类似的需求,json文件也可以这么去操作的,不过,下一篇我们再说吧。 直接上代码了: void XmlHandler::readXml(QString xmlPath,TableInfo& tableInfo) QFile xmlFile(xmlPath); if( xmlFi
本机系统配置:ThinkPadT570、Windows10、QT5.12.2(QtCreater4.8.2) 我建立的qt工程名为EditPic 需要解析的配置文件名为test.config,放在工程目录下 配置文件内容如下: <?xml version="1.0" encoding="utf-8" ?> <configuration> <ROOT version="...
class represents an XML document. QDomDocument类代表一个XML文件。 The QDomDocument class represents the entire XML document. Conceptually, it is the root of the document tree, and provides the primary access to the document’s data. 从概念上讲,它是文件树的根,并且
今天在做模拟仿真项目时,需要读取并解析XML文件,读取仿真配置参数,一般来说解析配置参数或者需要经常读存的地方就需要用到解析XML文件。下面给一段小demo来解析XML文件: void ReadXML() QDomDocument doc; QFile file(".../×××.xml"); if(!file.open(QIODevice::ReadOnly)) return 0; if(!doc.setContent(&file)) file.close(); 可能的错误: 1)使用QDomDocument创建根节点时,使用了诸如:rootNode.setAttribute(“ProjName”,fileName);或者rootNode.setAttribute(“Version”,”2.0”);等等,根节点不能有属性。 2)createElement传tagName参...
解决方法2 1.右击项目选择【属性】,打开项目属性页如下图所示,在【C/C++】 的【常规】子选项中,打开附加包含目录,添加新行,输入$(QTDIR)\include\QtXml 2.在属性页中
Qt中,可以使用QStandardItemModel和QTableView显示表格,并且通过在QStandardItemModel中插入QStandardItem,可以在表格中显示图片。以下是一个示例代码,演示如何在表格中插入图片: ```cpp QStandardItemModel* model = new QStandardItemModel(); QTableView* tableView = new QTableView(); tableView->setModel(model); // 插入图片 QStandardItem* item = new QStandardItem(); QPixmap pixmap("image.png"); // 加载图片 item->setData(pixmap, Qt::DecorationRole); // 设置图片数据 model->setItem(0, 0, item); // 在第一行第一列插入图片 tableView->show(); 在上面的代码中,首先创建了一个QStandardItemModel和一个QTableView,然后通过setModel将model设置到tableView中。接着创建了一个QStandardItem,并通过setData方法将图片设置为QStandardItem的数据,最后通过setItem方法将QStandardItem插入到第一行第一列中。最终通过show方法显示tableView。 需要注意的是,上面的代码中加载图片使用了QPixmap类,因此需要在代码中包含<QtGui/QPixmap>头文件。同时,插入图片时需要使用Qt::DecorationRole角色,并将QPixmap对象设置为数据。