qtxml生成与解析

2023-11-02

目录

xml生成:

xml解析:


xml生成:

void Qxml::setTml()
{
    QDomDocument doc;//xml文档树的创建
    //xml文档树的指令版本必有的
    QDomProcessingInstruction pi=doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"utf-8\"");
    doc.appendChild(pi);//xml文档树的添加
    QDomElement root=doc.createElement("root");//创建根元素 一般有且只有一个
    doc.appendChild(root);//xml文档树的添加
    ///<root>      大致的格式基本如此
    /// <ff00>ff0</ff00>
    /// <ff11>ff1</ff11>
    ///</root> 添加规则 *注意父元素添的是元素 *子元素一般添的是文本 依赖文档树doc对象生成
    QDomElement baotou=doc.createElement("报头");
    root.appendChild(baotou);
    QDomElement baowen=doc.createElement("报文");
    root.appendChild(baowen);
    //报头添加
    {
        QDomElement a1=doc.createElement("报头内容");
        QDomElement a1_1=doc.createElement("子内容1");
        a1_1.appendChild(doc.createTextNode("火力覆盖"));
        QDomElement a1_2=doc.createElement("子内容2");
        a1_2.appendChild(doc.createTextNode("直接打击"));
        a1.appendChild(a1_1);
        a1.appendChild(a1_2);
        QDomElement a2=doc.createElement("报头内容");
        a2.appendChild(doc.createTextNode("报头内容222"));
        QDomElement a3=doc.createElement("报头内容");
        a3.appendChild(doc.createTextNode("报头内容333"));
        baotou.appendChild(a1);
        baotou.appendChild(a2);
        baotou.appendChild(a3);
    }
    //报文
    {
        QDomElement a1=doc.createElement("报文内容");
        QDomElement a1_1=doc.createElement("子内容1");
        a1_1.appendChild(doc.createTextNode("火力覆盖"));
        QDomElement a1_2=doc.createElement("子内容2");
        a1_2.appendChild(doc.createTextNode("直接打击"));
        a1.appendChild(a1_1);
        a1.appendChild(a1_2);
        QDomElement a2=doc.createElement("报文内容");
        a2.appendChild(doc.createTextNode("报文内容222"));
        QDomElement a3=doc.createElement("报文内容");
        a3.appendChild(doc.createTextNode("报文内容333"));
        baowen.appendChild(a1);
        baowen.appendChild(a2);
        baowen.appendChild(a3);
    }
    //写入文件
    QFile fi("baowen.xml");
    if(!fi.open(QIODevice::WriteOnly|QIODevice::Text))
    {return;}
    else {
        fi.write(doc.toByteArray());
        fi.close();
        qDebug()<<"写入成功";
    }
}

xml解析:

void Qxml::getxml()
{
    QFile f("ff.xml");//
    f.open(QIODevice::ReadOnly|QIODevice::Text);
    QByteArray bytes=f.readAll();
    f.close();
    QDomDocument doc;//xml文档树
    doc.setContent(bytes);//必写如果写第二个参数可以为false,实际用的话一个参数就好了
    QDomElement root=doc.documentElement();//必写返回xml文档的根元素(xml一般有且只有一个根元素)
    ///核心:拿到元素 获取元素里面的节点 进行判断是(文本节点直接输出)是(元素节点再次进行解析)
    ///<ff11>ff1</ff11> 这就是一个元素(element) 他的节点(node)为1  节点类型是文本节点
    /// <ffff>               ffff 就是一个元素 节点为1  节点类型是 元素节点
    ///  <ff00>ff0</ff00>    ff00 是一个元素 节点为1  节点类型是  文本节点
    ///  <ff11>ff1</ff11>    ff11 是一个元素 节点为1  节点类型是  文本节点
    /// </ffff>              //解了好久悟性太差了哎
    QDomNodeList ns=root.childNodes();//获取根元素下所有同一级别 子节点 的个数
    qDebug()<<QString("root元素个数%1").arg(ns.size());
    QDomNode node=root.firstChild();//获取第一个子节点的所有节点
    if(node.isElement())
    //for(int i=0;i<ns.size();i++)//for一次处全部节点解开
    {   //如果节点是元素  就把当前节点转换成元素 继续解里面的子节点
        QDomElement el=node.toElement();
        //QDomElement el=ns.at(i).toElement();//for一次处全部节点解开
        QDomNodeList list=el.childNodes();
        qDebug()<<QString("list元素个数%1 标签名%2").arg(list.size())+el.tagName();
        for (int i = 0; i < list.size(); ++i)
        {
            QDomNode n=list.at(i);
            //判断是文本节点肯定只有一组文本 直接用当前标签对象获取 标签名和文本名
            if(n.nodeType()==QDomNode::TextNode)
            {
                //QDomText tx=n.toText();
                //qDebug()<<el.tagName()+"-标签-"+tx.nodeValue();//获取单个节点文本
                qDebug()<<el.tagName()+" "+el.text();//获取标签内全部文本
            }
            //如果是元素节点就继续解里面的子节点
            else if(n.nodeType()==QDomNode::ElementNode)
            {
                QDomElement el=n.toElement();
                QDomNodeList list=el.childNodes();
                for(int i=0;i<list.size();i++)
                {
                    QDomNode n=list.at(i);
                    if(n.nodeType()==QDomNode::TextNode)
                    {
                        //QDomText tx=n.toText();
                        //qDebug()<<el.tagName()+"-标签内-"+tx.nodeValue();
                        qDebug()<<el.tagName()+"-标签内-"+el.text();
                    }
                    else {
                        QDomElement el=n.toElement();
                        QDomNodeList list=el.childNodes();//没用使用为下一级节点做准备
                        qDebug()<<el.tagName()+" "+el.text();
                    }
                }
                //qDebug()<<el.tagName()+" "+el.text();
            }
        }
    }

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

qtxml生成与解析 的相关文章

  • Qt 是否已经有了自己的 new 和 delete 运算符?

    我正在使用一个QGraphicsScene小部件并在其上显示一些点QGraphicsRectItem 这意味着要拨打很多电话new addItem 当出现时 并且removeItem delete摆脱未使用的点 当然 对于性能问题 我已经实
  • QML 连接:不推荐使用连接中隐式定义的 onFoo 属性

    升级到 Qt 5 15 时收到以下错误消息 QML Connections Implicitly defined onFoo properties in Connections are deprecated Use this syntax
  • Mac 上的 Qt — 如何访问帮助菜单中的“搜索”

    我正在将我的 Qt 应用程序移植到 Mac OS X 在 Windows Linux 上 我使用 QLineEdit 在帮助菜单中提供搜索功能 In Mac OS X I saw something like this is built i
  • 静态变量中的 qt tr()

    我在 qt 中的翻译方面遇到问题 我的项目中的所有翻译都工作正常 但有一个翻译位于类的静态变量中 相应部分代码如下 头文件类似于这样 typedef struct int type QString problematicString inf
  • 是否可以在 Qt Creator 中将 Qt 样式表与升级的小部件一起使用?

    我正在尝试使用 Qt 样式表对标准小部件进行一些重大的重新设计 因此 在为不同的小部件手动完成大部分工作之后 objectName选择器 我决定以某种方式对类似的小部件进行分组 例如我有多个QFrames其作用类似于内部表单中的标题 我希望
  • Qt GUI 应用程序中的控制台输出?

    我有一个在 Windows 上运行的 Qt GUI 应用程序 它允许传递命令行选项 在某些情况下我想向控制台输出一条消息 然后退出 例如 int main int argc char argv QApplication a argc arg
  • 如何访问Loader的sourceComponent中的QML对象?

    我可能需要读取或写入的一些属性Loader s sourceComponent来自一些外部函数 访问该房产的方式是什么x里面的对象的Loader s sourceComponent import QtQuick 2 0 Item width
  • 扩展 TabViewStyle styleData

    我目前正在尝试找到一种更好的方法来执行此操作 将图标添加到选项卡 现在 我正在放弃 styleData title 以包含图标源 但如果能够扩展 styleData 就更好了 这样我就可以包含其他自定义属性 这是我当前的黑客 Tab tit
  • 面向 Delphi 开发人员的 Qt

    有人知道为 Delphi C Builder VCL 开发人员解释 Qt 的书籍或教程吗 对于具有该背景的开发人员来说 学习 Qt 的最佳方法是什么 我对如何使用 Qt 完成我知道如何在 Delphi 中完成的事情特别感兴趣 例如 Qt 相
  • 如何使用 ClangCodeModel 插件在 QtCreator 中设置 C++ 标准?

    抱歉 如果这是一个愚蠢的问题 但我已经尝试了几乎所有的方法 现在正在用头撞墙 问题是 带有 Clang 代码模型插件的 QtCreator 4 8 0 beta for Windows 解析我的项目 为 C 98 而实际上它是 C 17 但
  • QWinTaskbarProgress 不会显示

    我使用的是windows7和Qt5 3 0 我在 MainWindow 的构造函数中添加了以下内容 但任务栏上没有显示任何内容 我错过了什么 QWinTaskbarProgress pTaskbarProgress new QWinTask
  • 如何将枚举类传递给 QML?

    我正在学习QML with Qt并在通过时遇到一些麻烦enum class to qml 当我使用信号时int参数 一切正常 代码运行完美 But 麻烦就在这里 如果我使用信号与一些enum class我有参数undefinedqml 信号
  • QObject多重继承

    我正在尝试在 C Qt 类中使用 mix 来提供一大堆具有通用接口的小部件 该接口是以这样的方式定义的 如果它被定义为其他小部件类的基类 那么小部件本身将具有这些信号 class SignalInterface public QObject
  • 将 C++ 代码(本机客户端)移植到浏览器(Web 应用程序)

    我有一个使用 Qt creator SDK 编写的 C 模块 我想将此代码移植到任何网页上运行 而不会对最终用户损害源代码 用户应该能够在任何浏览器 Chrome Firefox Safari Explorer 上看到此模块的输出 而无需安
  • QPainterPath::arcTo 上的角度如何解释?

    我正在开发图形编辑器的功能 在其中编辑弧线 当形状是椭圆形时 QPainterPath arcTo 的行为并不像我预期的那样 当它是一个圆圈时 它会按预期工作 下面的两张图片显示了结果 在第一种情况下 我创建了一个圆 然后将其转换为初始起始
  • Qt 创建者 4.8.4。 Windows 7 - 64 位安装

    我在 QT 方面遇到了一些困难 我需要在学校使用它来完成一些 GUI 应用程序 我最近完成了以下步骤 1 mingw get inst 20120426 exefrom 来源锻造 http sourceforge net projects
  • 如何使用 qt 库中的调试符号为 qt 5.5 创建开发 shell

    我有一个开发外壳buildInputs条目包括qt55 qtbase 这很好用 今天 我在 qt 库中发生了段错误 我想要带有调试符号的 qt 库 我看了一下nixpkgs pkgs development libraries qt 5 5
  • QT C++ QRegularExpression 多个匹配

    我想使用正则表达式从 QString html 中提取信息 我明确想使用正则表达式 无解析器解决方案 和类Q正则表达式 http qt project org doc qt 5 0 qtcore qregularexpression htm
  • 在 QtCreator 中调试时如何查看 qDebug 消息

    我正在从 Eclipse CDT 带有 Qt 集成插件 过渡到 QtCreator 2 0 但仍有一件事困扰着我 QtCreator 当我在 QtCreator 中调试时 我在Application output tab直到我停止正在调试的
  • PySide6.1 与 matplotlib 3.4 不兼容

    当我只安装PySide6时 GUI程序运行良好 但是一旦我安装了matplotlib及其依赖包 包括pyqt5 则GUI程序将无法运行并输出以下错误消息 This application failed to start because no

随机推荐

  • Java 处理图片-压缩本地图片及远程图片,按照BASE64格式输出

    Java 处理图片 压缩本地图片及远程图片 按照BASE64格式输出 很久没有写博客了 不是我颓废了 而是实在是太忙了 抽不出时间也抽不出经历写东西了 幸亏项目已经落地 没有那么的忙了 记录一下 最近在做导出 发现很多时候导出的图片太大了
  • 简单聊聊Echarts伪3D地图实现的相关配置

    知识和技能真的是用进废退 还是得多实践 才不至于遗忘 目录 前言 二 实现原理 三 从0开始实现 1 目录结构 2 地图JSON数据获取 3 具体实现 重头戏 3 一些常见问题的解决方法 总结 前言 本文简单来聊一聊Echarts伪3D地图
  • 网管联盟

    http wglm net
  • Hive常用DDL操作

    一 Database 1 1 查看数据列表 show databases 1 2 使用数据库 USE database name 1 3 新建数据库 语法 CREATE DATABASE SCHEMA IF NOT EXISTS datab
  • 企业微信跳转小程序注意事项

    1 引用weixin 1 2 0 js 一定使用线上引用 npm install引用的报agentConfig is not a function 2 vue ts在public gt index 中引用 lt scri pt src ht
  • [爬虫] B站番剧信息爬取

    申明 本文对爬取的数据仅做学习使用 不涉及任何商业活动 侵删 简述 本次爬取目标是 番剧的基本信息 名字 类型 集数 连载or完结 链接等 番剧的参数信息 播放量 点赞 投币 追番人数等 时间信息 开播时间 完结时间 前提条件 编程语言 P
  • 【正点原子STM32连载】 第二十八章 低功耗实验 摘自【正点原子】APM32F407最小系统板使用指南

    1 实验平台 正点原子stm32f103战舰开发板V4 2 平台购买地址 https detail tmall com item htm id 609294757420 3 全套实验源码 手册 视频下载地址 http www openedv
  • 链路追踪zipkin

    目录 链路追踪介绍 zipkin整合mysql和mq 链路追踪介绍 链路追踪主要用于分布式系统 服务出现级联调用 能够提供调用的时间且能结算出网络延迟时间 gt 将服务还原成链路 链路数据模型有三个点 Trace 一个完整的链路 用的是我们
  • 不习惯的Vue3起步 の 一:<script setup>

    序 Vue3虽然说是Vue2的升级版 但里面不一样的地方还是挺多的 并且相比Vue2能更好的使用typescript了 先从网上找视频学习 https www bilibili com video BV1gf4y1W783 目录 Vue T
  • Elasticsearch实战(八)--- 词条为中心的 CrossFields 多字段搜索策略

    Elasticsearch实战 词条为中心的Cross Fields 搜索策略 文章目录 Elasticsearch实战 词条为中心的Cross Fields 搜索策略 1 字段中心实现方式及问题 1 1 准备数据 1 2 字段中心的Mos
  • [SQL系列] 从头开始学PostgreSQL 自增 权限和时间

    SQL系列 从头开始学PostgreSQL 事务 锁 子查询 Edward W的博客 CSDN博客https blog csdn net u013379032 article details 131841058上一篇介绍了事务 锁 子查询
  • Linux操作系统之基础命令

    文章目录 一 初识LInux操作系统 Linux操作系统和Windows操作系统的区别 Linux 分为内核版本和发行版本 目录结构命令 二 常用命令 1 ls命令 查看路径下所存在的文件 2 cd命令 切换路径 3 clear 清屏命令
  • 网络工程师工作经验分享

    网络 点击打开链接1 点击打开链接2 点击打开链接3 点击打开链接
  • Docker容器-cgroups资源配置

    目录 Cgroup的概述 使用stress工具测试CPU和内存 CPU周期限制 CPU Core控制 对内存限额 对 Block IO的限制 bps 和iops 的限制 Cgroups如何工作的 cgroup对cpu限制小结 cgroup对
  • 【其他】MacOS Homebrew安装与卸载

    打开terminal 输入 usr bin ruby e curl fsSL https raw githubusercontent com Homebrew install master install 输入sudo密码之后等待一会 之后
  • 电子拼图思维逻辑机的破解思路

    最近孩子去朋友家做客 喜欢上了一个玩具 网上找了好久都没找到 后来问朋友给了个链接 发现是上市不久的益智类游戏玩具 先上个图 开机之后有500关 难度越来越大 在朋友家玩的第3关 小孩子们都拼不上 然后我们家长大孩子们也一起参与 搞了几分钟
  • 前端使用FormData实现上传文件

    场景 用户通过点击图片弹出上传文件的框框 然后选择将要替换的图片 选择后实时预览 点击确定后通过ajax上传到服务器 前端html div div
  • 面试官都在问

    面试官都在问 Linux命令之gdb 0 简述 GDB GNU symbolic debugger 简单地说就是一个调试工具 它是一个受通用公共许可证即GPL保护的自由软件 一般来说 GDB主要帮助你完成下面四个方面的功能 1 启动你的程序
  • Python数据可视化

    Python数据可视化 Python地理区域发展分布热力图 目录 Python数据可视化 Python地理区域发展分布热力图 基本介绍 环境准备 程序设计 参考资料 基本介绍 Python数据可视化 Python地理区域发展分布热力图 环境
  • qtxml生成与解析

    目录 xml生成 xml解析 xml生成 void Qxml setTml QDomDocument doc xml文档树的创建 xml文档树的指令版本必有的 QDomProcessingInstruction pi doc createP