`

[原创]QT 解析 XML文档

阅读更多

    在编写QT程序的时候我们有时需要进行DOM的解析, 简单的DOM可以使用基于事件的解析方法, 层级结构较复杂的程序我们需要进行DOM方式的解析, 也就是基于文档的解析, QT对DOM的文档解析方式支持不是很好, 在使用的时候会遇到一些问题, 在这里我记录一些使用的技巧。


    首先, 我们还是要明确一些XML中的概念。XML中的内容叫做文档, 即document, 文档有一个根结点, 一般是<xml></xml>这个节点。 XML是由节点(node)构成的, 节点有很多种类型, 常见的是元素节点(elementnode), 文本节点(textnode), 属性节点(attributenode)。


    接下来我们来看常用的操作在QT中的实现方法。


在QTCreator中使用QT的DOM XML解析时要在pro文件中添加 QT += xml


一。获取文档对象

    从字符串创建XML文档对象

QDomDocument dom("解析器的名字");
dom.setContent(xml_content, &error_string, &error_line, &error_column); 
    // xml_content 是xml字符串, 后边的参数用来存储返回的错误信息


二。获取文档的根节点

QDomElement root = dom.documentElement();

 

三。根据ID获取元素

    直到4。7。3, QT的这个方法还是空实现, 所以只能自己实现一个, 下面是我写的一个简单实现, 请自行优化

QDomElement SomeClass::getElementById(QDomElement& parent, QString id)
{
    QDomNodeList children = parent.childNodes();
    QDomElement child_element;
    QDomElement empty;
    for (uint step = 0; step != children.length(); ++ step)
    {

        // 如果不是element, 跳过
        if (children.item(step).nodeType() != QDomNode::ElementNode)
        {
            continue;
        }
        child_element = children.item(step).toElement();
        // 找到了要找的element
        if (child_element.attribute("id") == id)
        {
            return child_element;
        }else // 否则递归
        {
            empty = getElementById(child_element, id);
            if (!empty.isNull())
            {
                break;
            }
        }
    }
    return empty;
}

 

四。遍历一个元素的子元素

    注意, 元素指的是元素节点

for (QDomElement step = word_name_e.firstChildElement();
         step != word_name_e.lastChildElement();
         step = step.nextSiblingElement())
{
    // 对step进行操作
}

 

五。将节点转换为元素节点

    这里说的转换是指将代表节点的对象转换为代表元素节点的对象

node.toElement(); // 这个方法很有用, 当你获得了一个节点, 要调取这个节点的某个属性时, 你会发现QDomElement
    才有这样的方法

 

六。将某节点下的所有文档内容保存为字符串

QString target_string;
QTextStream stream;
stream.setString(&target_string);
node.save(stream, 0);

 







1
1
分享到:
评论

相关推荐

    QT解析xml文档 读取写入

    代码已经经过测试,可以操作 声明:该代码是一朋友传给的~非本人杰作

    自己总结的操作xml文件的方法

    用jdom 操作xml文档 jdom+xpath 操作 xml 文档 Xstream

    DOM方式解析XML.pdf

    XML格式文档对于程序开发具有很重要的作用,QT利用Dom方式解析XML可以很方便的对数据进行存储于传输

    最新2021年9月4日tinyxml2 开源的C++ XML 文件解析库 建立的qt pro工程测试+测试说明文档

    1:TinyXML2 是 simple、small、efficient 开源的 C++ XML 文件解析库 2:最新2021年9月4日 加入tinyxml2.cpp 和 tinyxml2.h 即可#include "tinyxml2.h" 3:建立的qt pro工程测试 4:带有精简版测试说明,pdf格式 化繁...

    pythonqt5教程从零开始-pyQt5QtDesigner简易入门教程.pdf

    pythonqt5教程从零开始_pyQt5QtDesigner简易⼊门教程 ...这个过程其实是解析xml⽂件并转译为python程序对象的过程。 import sys from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5.uic import loadUi

    VS2022+QT5实现的xml配置可视化工具源代码

    1、基于QTreeWidget和QListWidget实现 2、根据xml文件动态生成界面,可以同时操作多个xml文档 3、选择文件夹,自动列出文件夹下的所有包括子文件夹下的xml文件

    Android开发之XML文件解析的使用

     本文主要介绍在Android中怎样来解析XML文件。主要采用的是SAX机制,SAX全称为Simple API for XML,它既是一种接口,也是一个软件包。作为接口,SAX是事件驱动型XML解析的一个标准接口。XML文件解析一般有2种方法,...

    精通qt4编程(源代码)

    Qt提供了多种布局管理部件,包括Qt布局管理器、分裂器、栈部件、工作空间部件和多文档区部件等。本章一一介绍了这些部件,并举例说明了它们在图形用户界面编程中的应用。 121 \中级篇 第6章 2D绘图 蔡志明本章内容较...

    Linux窗口程序设计_Qt4精彩实例分析.pdf

    Qt的基本模块(工具、核心、窗口部件、对话框) 与平台无关的Qt图形用户界面工具包和应用类 Qt设计器 可视化的Qt图形用户界面的生成...通过SAX接口和DOM Level 1很好且已经成形的XML解析器. SQL模块 SQL数据库访问类。

    精通Qt4编程(第二版)源代码

    Qt提供了多种布局管理部件,包括Qt布局管理器、分裂器、栈部件、工作空间部件和多文档区部件等。本章一一介绍了这些部件,并举例说明了它们在图形用户界面编程中的应用。 121 \中级篇 第6章 2D绘图 蔡志明本章内容...

    ZendFramework中文文档

    5.4. Zend_Config_Xml 6. Zend_Console_Getopt 6.1. Getopt 简介 6.2. 声明 Getopt 规则 6.2.1. 用短语法声明选项 6.2.2. 用长语法声明选项 6.3. 读取(Fetching)选项和参数 6.3.1. 操作 Getopt 异常 6.3.2...

    C++标准库介绍.pdf

     Xalan是个用于把XML文档转换为HTML纯文本或者其他XML类型文档XSLT处理器 5、CMarkup 参考网站WebSite:http://www.firstobject.com/xml.htm  这是种使用EDOMXML解析器在很多思路上面非常灵活实用值得大家在DOM和...

    xpath_test.rar

    使用qxmlquery实现python中xpath模块功能,适用于c++下xpath解析 思路是使用doc将xml文件加载到内存,再设置model,通过model去结合query来搜索文档

Global site tag (gtag.js) - Google Analytics