tinxml解析CDATA字段

摘要:
本文基于以下背景:C++,TinyXml库CDATA部分是什么?如果您想查看详细说明,可以参考本文:http://www.w3school.com.cn/xml/xml_cdata.asp下面是一个简短的描述:XML文件中的CDATA部分以FirstChild()-˃Value()获取CDATA部分的数据。直接返回的是constchar*,可以保存在std::string中。

一个XML文件可能含有CDATA区段数据,如何解析?

本文基于以下背景:

C++,TinyXml库(版本:2.6.1)

(1)什么是CDATA区段?

如果你要看详细的解释,可以参考这篇文章:http://www.w3school.com.cn/xml/xml_cdata.asp

这里简要地说明一下:XML文件中的CDATA区段以  <![CDATA[  开始,以  ]]>  结束,例如 <![CDATA[这是一段文本]]> ,CDATA区段中的文本不会被XML解析器解析,无论它们带有什么内容。因此,你可以用CDATA区段来存储含有不想被解析的文本(例如程序代码段)。

例如,一个XML文件内容如下:


<?xml version="1.0" ?>

<config>

    <property>

        <![CDATA[if(a<b){return 0;}]]>

    </property>

</config>

文章来源:http://www.codelast.com/

那么<property> </property>之间的内容解析出来之后是 if(a<b){return 0;} 。千万不要以为你解析出来的内容是包含CDATA等文字的!

对上面的结构的XML文件,使用TinyXml库来解析它时,先要得到<property>元素的指针(TiXmlElement* pProperty),然后再用方法pProperty->FirstChild()->Value()来获取CDATA区段的数据,返回的直接就是const char*了,可以保存在std::string中。

例如:

TiXmlDocument doc;

doc.LoadFile("/root/test.xml");

TiXmlElement* pRoot = doc.RootElement();

TiXmlElement* pProperty = pRoot->FirstChildElement();

std::string strCDATA = pProperty->FirstChild()->Value();    // strCDATA中就得到了 if(a<b){return 0;}

文章来源:http://www.codelast.com/

这里一定要注意的是,我们无法通过pProperty->GetText() 来获取CDATA区段中的文本!从上面的程序中,我们看到,TinyXml似乎是把 <![CDATA[if(a<b){return 0;}]]> 作 <property> 的一个child,这个child中的值(value)保存的就是我们要得到的文本。这个概念可能让人觉得有点奇怪,但只能这样做。

免责声明:文章转载自《tinxml解析CDATA字段》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇FFmpeg原始帧处理-滤镜API用法详解Python自动化学习笔记(1)认识接口测试以及postman、Charles工具简单应用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

UOS上如何安装rpm包

UOS的软件包格式是deb,如果要安装rpm的包则要先把rpm转换成deb才可以安装。步骤如下:1、UOS下安装aliensudoapt-getinstallalien2、将rpm包转为deb包sudoalien-dxxxx.rpm#将rpm转换位deb成功后会生成一个同名的xxxx.deb3、安装deb包sudodpkg-ixxxx.deb注意,用alie...

华为 HG526 破解实录(一)Cfg文件加解密工具

几天前,我去中国电信安装E169软件包,并发送了一个华为HG526无线路由猫和一个中兴xxx网络机顶盒(尚未开始制造麻烦)。当然,无线路由猫一如既往地被阉割了。搜索之后,我开始了我的快攻之旅。1.打开catdrop管理页面,使用telecomadmin和nE7jA%5m登录;2.将U盘插入猫。3.开放式管理=˃设备管理、备份配置。4.打开U盘,放下ctce8...

【转载】SecureCRT配色推荐和永久设置

2.配置文件夹和其他颜色选项==“全局选项==”终端==“外观==”ANSI颜色单击第二行中的第五个色块以修改文件夹颜色:对第二个色块执行相同的操作以修改压缩包和jar包的颜色:如果设置后文件夹和其他的颜色无效,您可以对第二行中设置背景色和字体颜色的颜色块执行相同的操作!...

sikuli简介

Sikuli脚本自动化,你在屏幕上看到的任何东西。Sikuli是一个开放源码的最初的用户界面设计组织在麻省理工学院的研究项目。现在是保持并进一步协调与开源社区开发的Sikuli实验室在美国科罗拉多州博尔德大学。Sikuli的MIT许可证下发布的。当然,你也可以使用sikuli的javaAPI使其在java环境下运行。小例子大体上了解sikuli的界面,下面来...

codeforces 765 F Souvenirs 线段树+set

问题的含义:多个查询的间隔中两个数字之差的绝对值的最小值:可以根据查询的l对脱机查询进行排序,并且可以从r到l进行反向查询,并且间隔i+1到n的每次更新都可以确保此更新不会影响下一次和后续更新。因为当两个区间相互覆盖时,具有较小l的区间的值必须小于或等于另一个区间,因此可以绘制一个图来理解。...

Spring Boot 核心配置文件 bootstrap &amp;amp; application

boostrap由父ApplicationContext加载,比applicaton优先加载boostrap里面的属性不能被覆盖3、bootstrap/application的应用场景application配置文件这个容易理解,主要用于SpringBoot项目的自动化配置。这个父级的SpringApplicationContext是先加载的,在加载appli...