qt QDomDocument

Qt中使用QDomDocument读写XML文件 注意事项 1、在*.pro文件中添加 QT += xml; 2、xml文件中只能存在一个根节点,如果存在根节点的兄弟节点,则只能读取到第一个根节点的内容。 #include <QDomDocument> #include <QFile> #include <QTextStream> #include <QDebug> int main(in... 阅读详情

XML,全称为可扩展标记语言”(extensible markuplanguage).是一种非常方便的数据交换数据存储的工具。

我们在取得一个XML格式的文件后,需要作句法分析去提取发布方提供的信息。而QtXML提供了很好的支持,包括DOM方式的实现和SAX方式的实现。

二者主要区别是:

DOM(DocumentObject Model)实现方式操作非常简单,但不适合处理过大文件;而SAX实现方式是能处理很大的XML文件,但是需要开发者写一些复杂的代码。Qt提供了对应于这两种用于读取、操作和编写XML的实现类,分别是QDomDocument类和QXmlStreamReader,这里我们选QDomDocument来处理XML文件。

 

首先是读取XML

主要操作包括:

 1).读取根节点:QDomElement  root =doc.documentElement();

2).读取第一个子节点:QDomNode  node = root.firstChild();

3).读取下一个子节点:node = node.nextSibling();

4).匹配结点标记:node.toElement().tagName() =="note"

5).读取节点文本:no =childNode.toText().data();

 

     QFilefile(fileName);
     if(!file.open(QFile::ReadOnly| QFile::Text)) {
         
returnfalse;
     }
     QStringerrorStr;
     
interrorLine;
     
interrorColumn;
 
     QDomDocument doc;
     
if(!doc.setContent(&file,false, &errorStr,&errorLine,&errorColumn))

{ //setContent 是将指定的内容指定给QDomDocument 解析,第一参数可以是QByteArray或者是文件名等。
         returnfalse;
     }
 
     file.close();

 

可以通过 doc.childNodes() 获得doc的所有的 子节点列表QDomNodeList。比如

QDomNodeList list=doc.childNodes();

for(inti=0;i<list.count();i++)

{

QDomNode  node=list.at(i);

// qDebug()<<”node nameis“<<node.nodeName();

// qDebug()<<”node typeis “<<node.nodeType();

}

通过上面的方法你就能知道每个节点的 名字和类型了,节点名字就是 标记 的名字。打印出来对照着 xml文件看就很容易明白了。QDomNode类是一个父类,QDomDocumentQDomNode的一个子类,鉴于大部分 QDomNode的类型都是QDomDocument.那么你可以使用toDocument()函数将QDomNode类型转换成QDomDocument.

QStringtext=node.toElement().text();

上面的语句可以将一个节点里的 文本 取出也就是标记内的文本 部分。使用该函数获得的编码就已经是unicode格式了,不需要再做转换。

 

 

然后是写入XML

创建节点,将其写入XML文件,主要操作包括:

1).创建根节点:QDomElement  root = doc.documentElement("rootName ");

2).创建元素节点:QDomElement  element= doc.createElement_x_x_x("nodeName");

3).添加元素节点根节点:root. a(element);

4).创建文本节点:QDomText  nodeText=doc.createTextNode("text");

5).添加文本节点元素节点:element. a(nodeText);

XML文件的内容:

<?xml version="1.0"encoding="UTF-8"?>

<Notes>

   <note>

       <no>001</no>

       <name>2010-05-10(13:53:24)</name>

       <content>A meeting</content>

       <font>Script MTBold</font>

   </note>

</Notes>

    QFile  file(fileName);
     
if(!file.open(QFile::ReadOnly | QFile::Text))
         
returnfalse;
     QString errorStr;
     
interrorLine;
     
interrorColumn;
     QDomDocument doc;
     
if(!doc.setContent(&file, false, &errorStr,&errorLine, &errorColumn))
         
returnfalse;
 
     file.close();
 
     QDomElement root = doc.documentElement();
     
if(root.tagName() != "root")
         
returnfalse;
 
     QDomElement element =  doc.createElement_x_x_x(
"file");


     QDomElement el_address = doc.createElement_x_x_x(
"address");
     QDomText text_address = doc.createTextNode(
"text");


     el_address.a
(text_address);
     element.a
(el_address);
 
     QDomElement el_path = doc.createElement_x_x_x_x("path");
     QDomText text_path = doc.createTextNode("text");


     el_path.a (text_path);
     element.a
(el_path);
 
     root.a (element);
 
     QFile f(fileName);
     if(!f.open(QFile::WriteOnly| QFile::Text))
         returnfalse;
 
     QTextStream out(&f);

      out.setCodec("UTF-8");//中文编码

//    doc.save(out,4,QDomNode::EncodingFromTextStream);

     doc.save(out, 3);
     f.close();

这里所有需要append的字节点只能由QDomDocument对象create,而不能直接new,否则永远也看不到新添加的节点,另外,读取和写入的文件流必须创建两个,否则会将需要写入的文档继续在原来文档的后面,造成多个根节点。

Qt 读写xml文件(QDomDocument) #ifndef DOCXML_H #define DOCXML_H #include <QString> #include <QStringList> #include <QDomDocument> #include <QDomElement> class DocXml { public: DocXml(); static void CreateXml(const QString &filePath); //创建xml 空 阅读详情

相关推荐

QT QDomDocument读取XML文件内容

//递归访问所有节点 void dealXmlFile(QDomElement first) {     QDomNode node = first.firstChild();     while(!node.isNull())     {         if(node.childNodes().count()>1)         {             dealXmlFi

houxiaoliwang的博客 1010

Qt中使用QDomDocument和QDomnode来读取xml

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

QTQDomDocument类的使用

详细说明 QDomDocument类表示XML文档。 QDomDocument类代表整个XML文档。从概念上讲,它是文档树的根,并提供对文档数据的主要访问。 由于元素,文本节点,注释,处理指令等不能在文档上下文之外存在,因此文档类还包含创建这些对象所需的工厂功能。创建的节点对象具有ownerDocument()函数,该函数将它们与在其上下文中创建的文档相关联。最常使用的DOM类是QDomNode,QDomDocument,QDomElement和QDomText。 解析的XML在内部由对象树表示,可以使用各

希望我的博客,能帮上你解决学习中工作中所遇到的问题 3953

QT读写XML文件之DOM方式解析XML

一、DOM简介 1、DOM简介 DOM是Document Object Model的简写,即XML文档对象模型,是由W3C提出的一种处理XML文档的标准接口。DOM 一次性读入整个XML文档,在内存中构造为一棵树(DOM树)将XML文件表示成一棵树,便于随机访问其中的节点,但消耗内存相对多一些。能够在这棵树上进行导航,比如移动到下一节点或者返回上一节点,也可以对这棵树进行修改,或者是直接

小众的博客 2392

Qt学习:QDomDocument

QDomDocument类代表了一个XML文件QDomDocument类代表整个的XML文件。概念上讲:它是文档树的根节点,并提供了文档数据的基本访问方法。由于元素、文本节点、注释、指令执行等等不可能脱离一个文档的上下文,所以文档类也包含了需要用来创建这些对象的工厂方法。被创建的节点对象有一个ownerDocument()函数,它将对象与对象常见的文档上下文环境关联起来。DO...

weixin_34037515的博客 712

Qt6.5示例:QDomDocument类解析XML文档和文件

QDomDocument类是用于处理XML文档的一个类。它提供了对XML文档数据访问的一系列功能。本示例通过完整示例代码,详细介绍如何利用QDomDocument类解析XML文档和文件。

天恩软件工作室 3329

qdomdocument setcontent_QTQDomDocument:setContent有关问题请问

QTQDomDocument::setContent问题请教QStringxmlPath="E:\\12.xml";QFilefile(xmlPath);if(!file.open(QIODevice::ReadOnly|QIODevice::Text)){//return0;}QDomDocumentdoc;QStringerrorStr;interrorLine,erro...

weixin_34966374的博客 880

qt使用QDomDocument读写xml文件

在使用QDomDocument读写xml之前需要在工程文件添加: QT += xml 1.生成xml文件 void createXml(QString xmlName) { QFile file(xmlName); if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate |QIODevice::Text)) re...

weixin_43510054的博客 1127

qdomdocument setcontent_Qt使用QDomDocument操作XML文件

本文介绍的是在Qt使用QDomDocument类实现XML文件的操作,QDomNode类是一个父类,QDomDocument是QDomNode的一个子类,鉴于大部分QDomNode的类型都是QDomDocument。XML,全称为扩展标记语言(extensible markup language).是一种非常方便的数据交换工具。现在Blog的订阅系统输出格式就是满足XML规范的RSS格式,还有SV...

weixin_39996798的博客 752

Qt的Xml操作QDomDocument

Qt的Xml操作QDomDocumentQt对于Xml的支持是很好的,一些我们需要的操作应有尽有,下面简单介绍一下怎样使用。主要有以下几点使用: 写xml到文件 读xml 添加节点到xml 删除xml中某节点信息 修改xml中某节点信息 准备工作 .pro加入QT += xml 需要include QDomDocument QTextStream QFile三个头文件 WriteXml直接上代码vo

FlyWine的博客 1万+

QTQDomDocument读写XML文件

版本说明与编号“Begin”根节点,可以理解为一级目录”TypeX“是子节点,可以理解为二级目录;”name“是属性,”zhangsan“是属性值“sex”“school”等是三级节点,可以理解为三级目录;”girl“”“Xian”等是文本;

MasterPJ的博客 669

Qt中的QDomDocument类处理XML文件

<br />本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途。 谢谢合作。<br /> 原文链接:用Qt中的QDomDocument类处理XML文件  <br />XML,全称为扩展标记语言(extensible markup language).是一种非常方便的数据交换工具。现在Blog的订阅系统输出格式就是满足XML规范的RSS格式,还有SVG矢量图形也使用了XML格式。<br />我们在取得一个XML格式的文件

Qt Qt, 分享Cute之Qt体验 1825

Qt的Xml操作的QDomDocument

Qt的Xml操作QDomDocument Qt对于Xml的支持是很好的,一些我们需要的操作应有尽有,下面简单介绍一下怎样使用。主要有以下几点使用: 写xml到文件 读xml 添加节点到xml 删除xml中某节点信息 修改xml中某节点信息 准备工作 .pro加入QT += xml 需要include QDomDocument QTextStream QFile三个头文件 WriteXml 直接上代码 void writeXml() { QDomDocument doc; QDomPro

周杰伦 1838

Qt中对QDomDocument和QDomnode的理解

一.对QDomDocument和QDomnode的理解 QDom前缀的都是代表节点类型。所以有,QDomElement代表一个Element节点,而QDomText代表一个Text节点。QDomNode类可以存储任意类型的节点。如果想进一步处理一个节点,首先必须把它转化为正确的数据类型。QDomNode调用toElement()以把它转化成QDomElement,然后调用tagName()来获得...

weixin_33795833的博客 1890

Qt通过QDomDocument实现将数据保存为xml文件

本机系统配置:ThinkPadT570、Windows10、QT5.12.2(QtCreater4.8.2) 通过QDomDocument实现xml文件的写入主要有以下几个步骤: 1.定义QDomDocument变量 QDomDocument m_domDocSaveConfig; 2.创建根节点: QDomElement root = m_domDocSaveConfig.docume...

weixin_43935474的博客 7820

QT学习笔记(8)-QDomDocument解析以及QTableView显示

本篇文章是对b站学习视频上面的一些总结与笔记,觉得这个视频还是不错的,值得花时间去听,那样才能更好的打好基础。共勉!这里也贴上一个这个视频的文档资料:https://pan.baidu.com/s/1x8dT6xorLa0jaNe8Wdd0IQ 提取码:8sdy 目录对xml使用QDomDocument进行读写 对xml使用QDomDocument进行读写 首先,你切记要在,pro文件中,加入 QT += xml,不然你就会出现这个错误: NK2019: 无法解析的外部符号 “__declspec(dlli

zwz_chome的博客 1661

qdomdocument setcontent_用 Qt 中的 QDomDocument类 处理 XML 文件

XML,全称为“可扩展标记语言”(extensible markup language).是一种非常方便的数据交换与数据存储的工具。我们在取得一个XML格式的文件后,需要作句法分析去提取发布方提供的信息。而Qt为XML提供了很好的支持,包括DOM方式的实现和SAX方式的实现。二者主要区别是:DOM (Document Object Model)实现方式操作非常简单,但不适合处理过大文件;而SA...

weixin_42539414的博客 1776

Qt通过QDomDocument实现xml文件读取解析

本机系统配置:ThinkPadT570、Windows10、QT5.12.2(QtCreater4.8.2) 我建立的qt工程名为EditPic 需要解析的配置文件名为test.config,放在工程目录下 配置文件内容如下: <?xml version="1.0" encoding="utf-8" ?> <configuration> <ROOT version="...

weixin_43935474的博客 1973
上一篇: Qt 编程点滴 初学者必看(1)
下一篇: QString::compare
Abigale
博客等级 码龄16年 33粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值