gpt4 book ai didi

c++ - RapidXML 提供空 CDATA 节点

转载 作者:太空狗 更新时间:2023-10-29 20:41:32 24 4
gpt4 key购买 nike

我也写了下面的代码来获取 CDATA 节点值,我得到了节点的名称,但是这些值是空白的。

我将解析标志更改为 parse_full,但它也不起作用。

如果我从 XML 中手动删除“<![CDATA[”和“]]>”,它会按预期提供值,但在解析之前删除它不是一个选项。

代码:

#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();

关于c++ - RapidXML 提供空 CDATA 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21029167/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com