<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CDATA &#8211; 编码无悔 /  Intent &amp; Focused</title>
	<atom:link href="https://www.codelast.com/tag/cdata/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.codelast.com</link>
	<description>最优化之路</description>
	<lastBuildDate>Sun, 03 May 2020 12:53:21 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>用TinyXml解析XML文件中的CDATA区段数据</title>
		<link>https://www.codelast.com/%e7%94%a8tinyxml%e8%a7%a3%e6%9e%90xml%e6%96%87%e4%bb%b6%e4%b8%ad%e7%9a%84cdata%e5%8c%ba%e6%ae%b5%e6%95%b0%e6%8d%ae/</link>
					<comments>https://www.codelast.com/%e7%94%a8tinyxml%e8%a7%a3%e6%9e%90xml%e6%96%87%e4%bb%b6%e4%b8%ad%e7%9a%84cdata%e5%8c%ba%e6%ae%b5%e6%95%b0%e6%8d%ae/#respond</comments>
		
		<dc:creator><![CDATA[learnhard]]></dc:creator>
		<pubDate>Wed, 08 Dec 2010 08:01:07 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[原创]]></category>
		<category><![CDATA[CDATA]]></category>
		<category><![CDATA[TinyXML]]></category>
		<category><![CDATA[解析]]></category>
		<guid isPermaLink="false">http://www.codelast.com/?p=883</guid>

					<description><![CDATA[<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="font-size:14px;">一个XML文件可能含有CDATA区段数据，如何解析？</span></span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="font-size:14px;">本文基于以下背景：</span></span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="font-size:14px;">C++，TinyXml库（版本：2.6.1）</span></span></p>
<p>
<span id="more-883"></span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="font-size:14px;">（1）什么是CDATA区段？</span></span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="font-size:14px;">如果你要看详细的解释，可以参考这篇文章：<a href="http://www.w3school.com.cn/xml/xml_cdata.asp">http://www.w3school.com.cn/xml/xml_cdata.asp</a></span></span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="font-size:14px;">这里简要地说明一下：XML文件中的CDATA区段以 &#160;<span style="color:#f00;">&#60;![CDATA[ &#160;</span>开始，以&#160;<span style="color:#f00;"> ]]&#62; &#160;</span>结束，例如&#160;</span><span style="color: rgb(255, 0, 0); ">&#60;![CDATA[<span style="color:#00f;">这是一段文本</span>]]&#62;&#160;</span>，CDATA区段中的文本不会被XML解析器解析，无论它们带有什么内容。因此，你可以用CDATA区段来存储含有不想被解析的文本（例如程序代码段）。</span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="font-size:14px;">例如，一个XML文件内容如下：</span></span></p>
<p>
	&#160;</p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="color:#008000;"><span style="font-size:14px;">&#60;?xml version=&#34;1.0&#34; ?&#62;</span></span></span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="color:#008000;"><span style="font-size:14px;">&#60;config&#62;</span></span></span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="color:#008000;"><span style="font-size:14px;">&#160;&#160; &#160;&#60;property&#62;</span></span></span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="color:#008000;"><span style="font-size:14px;">&#160;&#160; &#160; &#160; &#160;&#60;![CDATA[<span style="color:#f00;">if(a&#60;b){return 0;}</span></span>]]&#62;</span></span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="color:#008000;"><span style="font-size:14px;">&#160;&#160; &#160;&#60;/property&#62;</span></span></span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="color:#008000;"><span style="font-size:14px;">&#60;/config&#62;</span><br />
	</span></span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><strong style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 13px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(46, 46, 46); border-style: initial; border-color: initial; border-style: initial; border-color: initial; "><span style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 13px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; color: rgb(0, 0, 255); "><span style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 13px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; "><span style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 13px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; color: rgb(255, 255, 255); font-weight: normal; line-height: 20px; ">文章来源：http://www.codelast.com/</span></span></span></strong></span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="font-size:14px;">那么</span><span style="font-size: 14px; ">&#60;property&#62;</span>和<strong><span style="font-size: 14px; ">&#160;</span></strong><span style="font-size: 14px; ">&#60;/property&#62;</span>之间的内容解析出来之后是&#160;<strong><span style="font-size: 14px; "><span style="color: rgb(165, 42, 42); ">if(a&#60;b){return 0;}&#160;</span></span></strong>。千万不要以为你解析出来的内容是包含CDATA等文字的！</span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;">对上面的结构的XML文件，使用TinyXml库来解析它时，先要得到<span style="font-size: 14px; ">&#60;property&#62;</span>元素的指针（TiXmlElement* pProperty），然后再用方法pProperty-&#62;FirstChild()-&#62;Value()来获取CDATA区段的数据，返回的直接就是const char*了，可以保存在std::string中。</span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;">例如：</span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="color:#00f;">TiXmlDocument doc;<br />
	</span></span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="color:#00f;">doc.LoadFile(&#34;/root/test.xml&#34;);</span></span>&#8230; <a href="https://www.codelast.com/%e7%94%a8tinyxml%e8%a7%a3%e6%9e%90xml%e6%96%87%e4%bb%b6%e4%b8%ad%e7%9a%84cdata%e5%8c%ba%e6%ae%b5%e6%95%b0%e6%8d%ae/" class="read-more">Read More </a></p>]]></description>
										<content:encoded><![CDATA[<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="font-size:14px;">一个XML文件可能含有CDATA区段数据，如何解析？</span></span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="font-size:14px;">本文基于以下背景：</span></span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="font-size:14px;">C++，TinyXml库（版本：2.6.1）</span></span></p>
<p>
<span id="more-883"></span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="font-size:14px;">（1）什么是CDATA区段？</span></span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="font-size:14px;">如果你要看详细的解释，可以参考这篇文章：<a href="http://www.w3school.com.cn/xml/xml_cdata.asp">http://www.w3school.com.cn/xml/xml_cdata.asp</a></span></span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="font-size:14px;">这里简要地说明一下：XML文件中的CDATA区段以 &nbsp;<span style="color:#f00;">&lt;![CDATA[ &nbsp;</span>开始，以&nbsp;<span style="color:#f00;"> ]]&gt; &nbsp;</span>结束，例如&nbsp;</span><span style="color: rgb(255, 0, 0); ">&lt;![CDATA[<span style="color:#00f;">这是一段文本</span>]]&gt;&nbsp;</span>，CDATA区段中的文本不会被XML解析器解析，无论它们带有什么内容。因此，你可以用CDATA区段来存储含有不想被解析的文本（例如程序代码段）。</span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="font-size:14px;">例如，一个XML文件内容如下：</span></span></p>
<p>
	&nbsp;</p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="color:#008000;"><span style="font-size:14px;">&lt;?xml version=&quot;1.0&quot; ?&gt;</span></span></span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="color:#008000;"><span style="font-size:14px;">&lt;config&gt;</span></span></span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="color:#008000;"><span style="font-size:14px;">&nbsp;&nbsp; &nbsp;&lt;property&gt;</span></span></span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="color:#008000;"><span style="font-size:14px;">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&lt;![CDATA[<span style="color:#f00;">if(a&lt;b){return 0;}</span></span>]]&gt;</span></span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="color:#008000;"><span style="font-size:14px;">&nbsp;&nbsp; &nbsp;&lt;/property&gt;</span></span></span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="color:#008000;"><span style="font-size:14px;">&lt;/config&gt;</span><br />
	</span></span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><strong style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 13px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(46, 46, 46); border-style: initial; border-color: initial; border-style: initial; border-color: initial; "><span style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 13px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; color: rgb(0, 0, 255); "><span style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 13px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; "><span style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 13px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; color: rgb(255, 255, 255); font-weight: normal; line-height: 20px; ">文章来源：http://www.codelast.com/</span></span></span></strong></span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="font-size:14px;">那么</span><span style="font-size: 14px; ">&lt;property&gt;</span>和<strong><span style="font-size: 14px; ">&nbsp;</span></strong><span style="font-size: 14px; ">&lt;/property&gt;</span>之间的内容解析出来之后是&nbsp;<strong><span style="font-size: 14px; "><span style="color: rgb(165, 42, 42); ">if(a&lt;b){return 0;}&nbsp;</span></span></strong>。千万不要以为你解析出来的内容是包含CDATA等文字的！</span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;">对上面的结构的XML文件，使用TinyXml库来解析它时，先要得到<span style="font-size: 14px; ">&lt;property&gt;</span>元素的指针（TiXmlElement* pProperty），然后再用方法pProperty-&gt;FirstChild()-&gt;Value()来获取CDATA区段的数据，返回的直接就是const char*了，可以保存在std::string中。</span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;">例如：</span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="color:#00f;">TiXmlDocument doc;<br />
	</span></span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="color:#00f;">doc.LoadFile(&quot;/root/test.xml&quot;);<br />
	</span></span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="color:#00f;">TiXmlElement* pRoot = doc.RootElement();<br />
	</span></span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="color:#00f;">TiXmlElement* pProperty = pRoot-&gt;FirstChildElement();<br />
	</span></span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="color:#00f;">std::string strCDATA =&nbsp;pProperty-&gt;FirstChild()-&gt;Value();</span> &nbsp; &nbsp;// strCDATA中就得到了&nbsp;<span style="font-size: 14px; "><span style="color: rgb(165, 42, 42); ">if(a&lt;b){return 0;}</span></span></span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><strong style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 13px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(46, 46, 46); border-style: initial; border-color: initial; border-style: initial; border-color: initial; "><span style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 13px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; color: rgb(0, 0, 255); "><span style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 13px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; "><span style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 13px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; color: rgb(255, 255, 255); font-weight: normal; line-height: 20px; ">文章来源：http://www.codelast.com/</span></span></span></strong></span></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;">这里一定要注意的是，我们无法通过pProperty-&gt;GetText() 来获取CDATA区段中的文本！从上面的程序中，我们看到，TinyXml似乎是把&nbsp;</span><span style="font-size: 14px; ">&lt;![CDATA[<span style="color: rgb(165, 42, 42); ">if(a&lt;b){return 0;}</span>]]&gt;</span><strong><span style="font-size: 14px; ">&nbsp;</span></strong>当<span style="font-family:arial,helvetica,sans-serif;">作&nbsp;</span><span style="font-family:arial,helvetica,sans-serif;"><span style="font-size: 14px; ">&lt;property&gt;</span></span><span style="font-family:arial,helvetica,sans-serif;"><strong><span style="font-size: 14px; ">&nbsp;</span></strong></span><span style="font-family:arial,helvetica,sans-serif;">的一个child，这个child中的值（value）保存的就是我们要得到的文本。这个概念可能让人觉得有点奇怪，但只能这样做。</span></p>
<p>	<span style="color: rgb(255, 255, 255);">文章来源：</span><a href="https://www.codelast.com/" rel="noopener noreferrer" target="_blank"><span style="color: rgb(255, 255, 255);">https://www.codelast.com/</span></a><br />
	<span style="color: rgb(255, 0, 0);">➤➤</span>&nbsp;版权声明&nbsp;<span style="color: rgb(255, 0, 0);">➤➤</span>&nbsp;<br />
	转载需注明出处：<u><a href="https://www.codelast.com/" rel="noopener noreferrer" target="_blank"><em><span style="color: rgb(0, 0, 255);"><strong style="font-size: 16px;"><span style="font-family: arial, helvetica, sans-serif;">codelast.com</span></strong></span></em></a></u>&nbsp;<br />
	感谢关注我的微信公众号（微信扫一扫）：</p>
<p style="border: 0px; font-size: 13px; margin: 0px 0px 9px; outline: 0px; padding: 0px; color: rgb(77, 77, 77);">
	<img decoding="async" alt="wechat qrcode of codelast" src="https://www.codelast.com/codelast_wechat_qr_code.jpg" style="width: 200px; height: 200px;" /></p>
<p>
	<span style="font-family:arial,helvetica,sans-serif;"><span style="color:#fff;">NULL</span></span></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.codelast.com/%e7%94%a8tinyxml%e8%a7%a3%e6%9e%90xml%e6%96%87%e4%bb%b6%e4%b8%ad%e7%9a%84cdata%e5%8c%ba%e6%ae%b5%e6%95%b0%e6%8d%ae/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
