`

[原创]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文档 读取写入

    在QT中解析XML文档主要依赖于QDomDocument类和相关的辅助类,如QDomElement、QDomNode等。XML(eXtensible Markup Language)是一种结构化数据格式,常用于存储和传输数据。 XML文档由一系列元素组成,每个元素都有...

    Qt操作XML文档(增删改查)

    首先,Qt中的`QDomDocument`类是用于解析和操作XML文档的核心类。它基于DOM(Document Object Model)模型,允许开发者以树形结构访问和修改XML文档的任何部分。要加载一个XML文件,可以创建`QDomDocument`对象并...

    Qt解析XML文件

    本篇文章将深入探讨在Qt中如何使用DOM和SAX两种方法来解析XML文件。 首先,我们来了解一下DOM(Document Object Model)和SAX(Simple API for XML)这两种解析方式的基本概念: 1. DOM解析:DOM是一种基于树形...

    xml.zip_QT_qt xml_qt 解析 xml_xmlstreamlint

    首先,QT的QXmlStreamReader类是用于解析XML文档的流式解析器,它允许我们逐个读取XML文档的元素,而不必一次性加载整个文档到内存。这使得处理大型XML文件成为可能,同时也降低了资源消耗。QXmlStreamReader提供了...

    基于QT实现XML文件读写操作,解析操作

    首先,我们需要了解QT中的QDomDocument类,它是QT提供的XML解析器,可以用来加载、修改和保存XML文档。使用QDomDocument,你可以将整个XML文档加载到内存中,然后通过DOM(Document Object Model)树结构来访问和...

    基于QT的XML文件解析器

    解析XML文件的关键在于理解这种结构,并将其转换为程序可以处理的数据形式。 描述中提到的“有源码有程序”,意味着这个XML文件解析器不仅提供了可执行程序,还附带了源代码。这对于学习和研究是极其有价值的,...

    QT使用TinyXML开源库解析XML文件

    QT框架是广受欢迎的开源C++开发平台,用于构建跨平台的应用程序,而TinyXML则是一个小巧、轻量级的开源库,专门用于解析和操作XML文档。在QT项目中集成TinyXML,可以方便地处理XML数据,尤其适用于那些需要读取、...

    Qt XML解析程序

    2. **QXmlStreamReader**: 这个类提供了一个流式解析器,用于逐行或逐事件地解析XML文档。它非常适合处理大型XML文件,因为它可以避免一次性加载整个文件到内存中。通过`QXmlStreamReader::readNext()`方法可以逐步...

    Qt读写Xml文件,QTreeWidget显示Xml和导出Xml文件

    QXml是Qt中的XML处理模块,包括QDomDocument、QDomElement等类,用于解析和操作XML文档。本文将详细讲解如何使用Qt来读取、写入XML文件,并通过QTreeWidget进行显示,同时介绍如何将QTreeWidget中的数据导出为XML...

    Qt5 XML文件的解析,增删改查节点。

    Qt5是一个强大的跨平台应用程序开发框架,它提供了丰富的API来支持XML处理,包括解析、创建、修改和查询XML文档。本篇文章将深入探讨Qt5如何使用DOM(Document Object Model)模型来操作XML文件,实现增、删、改、查...

    Qt实现xml文件内容的遍历读出

    首先,我们需要了解Qt中的QDomDocument类,它是解析XML文档的主要工具。`QDomDocument`可以加载XML文件并将其内容以DOM(Document Object Model)树的形式存储,使得我们可以通过节点遍历整个XML结构。在`...

    Qt读写XML文档示例程序

    QDomDocument提供了一种树形结构,用于解析XML文档并进行操作。我们首先需要加载XML文件到QDomDocument对象,然后就可以通过该对象进行读写操作。 3. **读取XML文档** 使用QDomDocument的`parse()`函数或者`...

    xml.rar_Qt配置功能_qt xml_qt读取xml_qt读取xml文件

    Qt是一个强大的跨平台应用程序开发框架,它提供了丰富的API用于处理XML数据,包括读取、写入和解析XML文档。让我们详细讨论相关知识点。 首先,XML(eXtensible Markup Language)是一种自描述的标记语言,常用于...

    qt xml操作 遍历

    QXmlStreamReader用于解析XML文档,逐个处理XML节点,而QXmlStreamWriter则用于生成XML文档。在遍历XML时,我们可以利用QXmlStreamReader的readNext()方法逐个访问XML元素、属性、文本等节点。 1. **XML的读取与...

    基于QT封装的XML操作,显示类

    QDomDocument是QT库中的一个核心类,它提供了一种DOM(Document Object Model)模型来解析XML文档。DOM是一种树形结构,每个XML元素、属性、文本等都被表示为树上的一个节点。通过QDomDocument,我们可以方便地创建...

    基于Qt的xml解析

    在本文中,我们将深入探讨如何在Qt框架下使用DOM(Document Object Model)方式解析XML文件。DOM是一种将XML文档转化为树形结构的模型,允许程序员通过遍历节点来访问和修改XML数据。以下是对该主题的详细阐述: ...

    QT写的xml文档操作源代码

    通过查看和分析这段代码,你可以深入理解QT如何处理XML文档,包括解析、查询、修改和保存XML数据。学习这部分内容对提升QT应用开发能力,特别是涉及数据存储和交换的场景,非常有帮助。同时,熟悉DOM模型也是XML编程...

    将xml内容显示Qt界面

    Qt提供了QDomDocument类来解析XML文档。我们可以使用QFile加载XML文件,然后通过QDomDocument的parse方法将文件内容转换为DOM(文档对象模型)树。DOM允许我们以结构化的方式访问和操作XML数据,就像遍历一个树形...

    XML_qt5xml_

    1. **QXmlStreamReader**:这个类用于逐行或逐元素地解析XML文档,支持事件驱动的解析模式。通过读取XML文件,你可以检查每个节点的类型,如元素、文本、注释等,并对它们进行相应的处理。例如,你可以创建一个`...

    Qt读写Xml文件(QTreeWidget加载显示Xml文件内容;QTreeWidget项导出保存为Xml)

    Qt提供了QDomDocument类来解析XML文档,QDomElement类代表XML文档中的元素节点,而QDomNode类则用于表示所有类型的XML节点。以下是一个简单的示例,演示了如何读取XML文件并打印其内容: ```cpp #include #include...

Global site tag (gtag.js) - Google Analytics