C++(BCB)解析XML文件的一个例子

news/2025/6/10 6:28:45

最近在开发MTK工具过程中,发现了一个C++解析XML文件的非常好用的方法,下面对此做个记录:

  1. 引用两个头文件:
#include "tinyxml.h"
#include "tinystr.h"
  1. 这两个头文件不是C++标准库,需要自行下载下来放到代码中去引用,这里贴上链接:
    tinyxml.h下载地址
    同时需要将相应的cpp放到代码下。
  2. 接下来就是常规操作了,对象实例化等等,直接贴上代码,稍微用点心,还是很简单的:
#define FILENAME "test.xml"  //指定文件名
int __fastcall TBOOT1::ReadEfuseByXML()
{TiXmlDocument *m_pXmlDoc;	//Efuse_Secure_Setting和Efuse_Lock_Setting是我自定义的两个结构体,具体代码就不贴了memset(&secure_set, 0, sizeof(Efuse_Secure_Setting));memset(&lock_set, 0, sizeof(Efuse_Lock_Setting));m_pXmlDoc = new TiXmlDocument(FILENAME);bool m_isloadfile = m_pXmlDoc->LoadFile(TIXML_ENCODING_UTF8); //LoadFile是tinyxml的自带函数,load xml文件if (TRUE != m_isloadfile){return -1;}int ret;bool pbool;//实例化句柄TiXmlHandle docHandle(m_pXmlDoc);//TiXmlElement* childCommonCtrl = docHandle.FirstChild("flashtool-config").FirstChild("commands").FirstChild("efuse").FirstChild("common-ctrl").ToElement();//读子节点//if (NULL == childCommonCtrl) {return S_BROM_EFUSE_BLOW_ERROR;}TiXmlElement* childSecureCtrl = docHandle.FirstChild("flashtool-config").FirstChild("commands").FirstChild("efuse").FirstChild("secure-ctrl").ToElement();//读子节点if (NULL == childSecureCtrl) {return S_BROM_EFUSE_BLOW_ERROR;}//TiXmlElement* childSbcKeyCtrl = docHandle.FirstChild("flashtool-config").FirstChild("commands").FirstChild("efuse").FirstChild("sbc-pub-key").ToElement();//if (NULL == childSbcKeyCtrl) {return S_BROM_EFUSE_BLOW_ERROR;}//读Secure节点的属性ret = childSecureCtrl->QueryBoolAttribute("Enable_ACC", &pbool);//读节点属性,也就是Enable_ACC具体的值if (ret == TIXML_NO_ATTRIBUTE) {secure_set.acc_en = BoolToEfuseOpt(false);}else if (ret == TIXML_SUCCESS) {secure_set.acc_en = BoolToEfuseOpt(pbool);if (secure_set.acc_en != MainForm->m_clsEfuseXmlSetting.secure_arg.acc_en) //xml与写入手机的efuse属性值比较{Application->MessageBox("Efuse Error", "Efuse��֤ʧ��\n����Enable_ACC", MB_OK);return S_BROM_EFUSE_BLOW_ERROR;}}else {return S_GET_XML_SECURE_CTRL_FAIL;}return S_EFUSE_SUCCESS;}
  1. xml的内容我截取了一部分,如下:
<?xml version="1.0" encoding="UTF-8" ?>
<flashtool-config><commands><efuse><common-ctrlDisable_NAND_boot="false"Disable_EMMC_boot="false" /><secure-ctrlEnable_DAA="true"Enable_SBC="true"Disable_JTAG="true" /><sbc-pub-key><key-type>abb</key-type><pub-key-e>11111</pub-key-e><pub-key-n>12345</pub-key-n></sbc-pub-key><common-lockcom_ctrl_lock="false"usb_id_lock="false" /><secure-locksec_msc_lock="false"sec_attr_lock="true" /><usb-id vid="0000" pid="0000"/> </efuse></commands>
</flashtool-config>
  1. XML只能这么多了,再多要吃国家饭了。

作品原创,转载请注明出处,蟹蟹!

文章来源:https://blog.csdn.net/weixin_43172441/article/details/120435119
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://dhexx.cn/news/show-4055922.html

相关文章

十年不跳槽的精英

在中国外企和民企工作的人&#xff0c;呆满两年就算老人&#xff0c;呆满五年算是牛人&#xff0c;呆满十年的&#xff0c;绝对可以被称为仙人。 细数我认识的为数不多的几个仙人&#xff0c;发现比起那些每两三年跳一次槽的精英们&#xff0c;他们如今无论在薪水待遇、头衔职位…

内外网同时访问路由配置(WIN11)

电脑环境&#xff1a; Win11 网线连接内网 无线网卡连接外网配置方法&#xff1a; (1) 同时连接内外网&#xff0c;分别记录IP地址&#xff0c;掩码&#xff0c;网关 例如&#xff0c;我的电脑分别为&#xff1a; 内网&#xff1a; IPv4 地址 . . . . . . . . . . . . : 172.16…

CodeReivew工具 Review Board 安装使用札记

CodeReivew工具 Review Board 大名鼎鼎.值得研究. 1)安装的时候至少用下载如下一堆的文件,在Windows下的安装还算是容易的,过程有点长,概念有点新,全是基于Python的.Python对SVN的支持比PHP强多了.不知道为什么! 以下是我安装后的界面 1) CodeReivew 2) 提交一个request后,可…

SQLServer CONVERT函数的用法.

1)SQLServer里如何判断12-05-2010这样的字符串到底是代表 2010年5月12号呢?还是2010年12月5号呢&#xff1f; 用&#xff1a; select cast(12-05-2010 as datetime ) 可以看到输出&#xff1a; 2010-12-05 00:00:00.000 看来始终是12月5号&#xff0c;始终是把月份放…

Code Review之代码规范篇

由于先前公司做了一个外国的项目,那个项目好像基于掌上电脑的一个小网站(具体的不敢问头太多),结果我们的HTML代码写的不好, 被国外的人说我们的代码结构不好,CSS里属性值老多重复等.在我看来可能当时这样一种网站由于时间进度\项目规模等各种原因,没有足够的人手去把那些东西写…

OpenCMS7.5 + Apache2.2+Tomcat6集成 去掉2个opencms路径

1.修改去掉第一个/opencms 1.1 将opencms安装成tomcat根路径&#xff0c;一般修改servlet.xml中加入&#xff1a; <Context path"" docBase"D:/tomcat-whirlpool/opencms" /> 就行了。同时servlet.xml应该有具体某一个site的port配置: <Connec…

WORD,EXCEL文档标题栏(任务栏)显示路径

1.在“工具”菜单中&#xff0c;指向“宏”&#xff0c;并单击“宏”&#xff0c;打开其对话框。   2.在“宏名”框中&#xff0c;键入“AutoOpen”&#xff0c;单击“创建”按钮 &#xff08;如图2&#xff09;&#xff0c;打开“Microsoft Visual Basic”编辑窗口。如果在…

MAVEN编译时报错Could not reserve enough space for object heap

公司某个项目在初次使用&#xff0c;尝试运行代码 maven在package时报错 [ERROR] Error occurred during initialization of VM [INFO] Could not reserve enough space for object heap [ERROR] Error: Could not create the Java Virtual Machine. [ERROR] Error: A fatal …

Notes 显示较大字体

C:/Program Files/IBM/Lotus/Notes/notes.ini 加上&#xff1a; Display_font_adjustment1

关闭公司电脑的强制屏幕保护

公司电脑安静10分钟之后自动会黑屏 开始以为是进入睡眠状态了&#xff0c;将电源选项全部改成从不睡眠但是一点效果都没有 最近终于发现是在哪里的限制在运行>rsop.msc其中%systemroot%\system32\scrnsave.scr就是当前使用的屏幕保护程序应该是公司通过域管理强制设置了屏幕…