tinyxml是一个小型而功能强健的开源XML处理库。但是在对<![CDATA[ ]]>的数据通过函数GetText()进行读取的时候,总是只能回取到第一个<![CDATA[ ]]>数据里的内容,查看源码,发现解析是没有任何问题的,tinyxml只是把它接下来的<![CDATA[ ]]>数据放到了另外一个节点进行了保存。我们可以修改GetText()来获取全部的数据,这样上层调用的时候就不要对<![CDATA[ ]]>数据进行另类处理了。
源码下载(http://www.grinninglizard.com/tinyxml/index.html)
修改前:(tinyxml.cpp)
const char* TiXmlElement::GetText() const
{
const TiXmlNode* child = this->FirstChild();
if ( child ) {
const TiXmlText* childText = child->ToText();
if ( childText ) {
return childText->Value();
}
}
return 0;
}
修改后:
const char* TiXmlElement::GetText() const
{
TiXmlString *strCdata = (TiXmlString *)&m_strCdata;
strCdata->clear();
const TiXmlNode* child = this->FirstChild();
if ( child ) {
const TiXmlText* childText = child->ToText();
if (childText->cdata)
{
while (child)
{
strCdata->append(child->Value(),child->value.length());
child = child->next;
}
return m_strCdata.c_str();
}
else
{
if ( childText ) {
return childText->Value();
}
}
}
return 0;
}