RapidXML提供空的CDATA节点

罗杰·罗素

我还编写了下面的代码来获取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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

RapidXML节点异常处理

来自分类Dev

Rapidxml 遍历节点

来自分类Dev

使用RapidXML读取XML节点

来自分类Dev

从rapidxml:xmlnode获取子计数以获取随机子节点

来自分类Dev

使用pugixml和rapidxml移动(不复制)节点

来自分类Dev

Rapidxml在输出空元素时如何更改标签格式

来自分类Dev

C++/RapidXML:编辑节点并写入新的 XML 文件没有更新的节点

来自分类Dev

C ++ RapidXml-使用first_node()遍历以修改XML文件中节点的值

来自分类Dev

空节点的Dataweave错误

来自分类Dev

xml的空节点

来自分类Dev

删除空节点

来自分类Dev

Java - 空的 XML 节点

来自分类Dev

从UnicodeString创建CData节点时XML无效字符

来自分类Dev

将所有xml节点设置为CDATA

来自分类Dev

HTTPEntity提供空值

来自分类Dev

summarise()提供空输出

来自分类Dev

使用Transformer处理空的CDATA时出现IndexOutOfBoundsException

来自分类Dev

递归空节点清除

来自分类Dev

递归空节点清除

来自分类Dev

PHP类提供空对象

来自分类Dev

requestFocus()提供空指针异常

来自分类Dev

NLTK ChartParser提供空列表

来自分类Dev

AppiumDriver提供空指针异常

来自分类Dev

提供从功能节点到http节点的ssl证书

来自分类Dev

请求节点模块不提供html

来自分类Dev

提供从节点到通用角度的价值

来自分类Dev

节点JS不提供静态图片

来自分类Dev

带有CDATA和空格的文本节点应如何在XML中解释?

来自分类Dev

如何使用cdata-section-elements匹配所有xml节点