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

最近在开发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-ctrl
        Disable_NAND_boot="false"
        Disable_EMMC_boot="false" />
        
      <secure-ctrl
        Enable_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-lock
        com_ctrl_lock="false"
        usb_id_lock="false" />
        
      <secure-lock
        sec_msc_lock="false"
        sec_attr_lock="true" />
        
      <usb-id vid="0000" pid="0000"/> 
    </efuse>
  </commands>
</flashtool-config>
  1. XML只能这么多了,再多要吃国家饭了。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值