我还编写了下面的代码来获取CDATA节点值,获得了节点的名称,但是这些值为空。
我将parse Flags更改为parse_full,但它也不起作用。
如果我从XML中手动删除“ <![CDATA [” and“]]>”,它会提供预期的值,但是在解析之前将其删除是不可行的。
代码:
#include <iostream>
#include <vector>
#include <sstream>
#include "rapidxml/rapidxml_utils.hpp"
using std::vector;
using std::stringstream;
using std::cout;
using std::endl;
int main(int argc, char* argv[]) {
rapidxml::file<> xmlFile("test.xml");
rapidxml::xml_document<> doc;
doc.parse<rapidxml::parse_full>(xmlFile.data());
rapidxml::xml_node<>* nodeFrame = doc.first_node()->first_node()->first_node();
cout << "BEGIN\n\n";
do {
cout << "name: " << nodeFrame->first_node()->name() << "\n";
cout << "value: " << nodeFrame->first_node()->value() << "\n\n";
} while( nodeFrame = nodeFrame->next_sibling() );
cout << "END\n\n";
return 0;
}
XML:
<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0" xmlns:c="http://base.google.com/cns/1.0">
<itens>
<item>
<title><![CDATA[Title 1]]></title>
<g:id>34022</g:id>
<g:price>2173.00</g:price>
<g:sale_price>1070.00</g:sale_price>
</item>
<item>
<title><![CDATA[Title 2]]></title>
<g:id>34021</g:id>
<g:price>217.00</g:price>
<g:sale_price>1070.00</g:sale_price>
</item>
</itens>
</rss>
使用时CDATA
,RapidXML将其解析为层次结构中外部元素“下方”的一个单独节点。
您的代码可以通过使用正确获得“标题” nodeFrame->first_node()->name()
,但是-由于CDATA
文本位于单独的元素中,因此您需要使用它来提取值:
cout << "value: " <<nodeFrame->first_node()->first_node()->value();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句