首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RapidXML给出空CDATA节点

RapidXML给出空CDATA节点
EN

Stack Overflow用户
提问于 2014-01-09 19:17:49
回答 1查看 2K关注 0票数 4

我编写了下面的代码来获得CDATA节点的值,我得到了节点的名称,但是值是空的。

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

如果我手动从XML中删除"“,它会给出预期的值,但是在解析之前删除它不是一个选项。

守则:

代码语言:javascript
复制
#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:

代码语言:javascript
复制
<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>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-09 20:24:54

使用CDATA时,RapidXML会将其解析为层次结构中的外部元素“下面”的单独节点。

您的代码通过使用nodeFrame->first_node()->name()正确地获得“标题”,但是-由于CDATA文本位于一个单独的元素中,因此需要使用它提取值:

cout << "value: " <<nodeFrame->first_node()->first_node()->value();

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21029167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档