rapidxml first_node不返回null

时间:2013-01-25 13:54:55

标签: c++ xml null rapidxml

我正在尝试使用C ++中的RapidXML解析XML文件,该文件如下:

<root>
    <a>
        <b>1111</b>
        <c>
            <d1>2222</d1>       
            <d2>3333</d2>
        </c>
    </a>
</root>

识别我正在做的父节点:

if (currentNode->first_node() != 0) { // this node has children, search for them }

它适用于两个第一个节点(root和a),但是当我为节点'b'执行此操作时,它返回指向某处而不是0的指针,但是'b'没有子节点。它不应该返回0吗? RapidXML文档说:

function xml_node :: first_node 概要

xml_node<Ch>* first_node(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const;

描述 获取第一个子节点,可选地匹配节点名称。

参数 名称     要找的孩子的名字,或者0,不管名字如何都要归还第一个孩子;如果name_size为非零

,则此字符串不必为零终止

NAME_SIZE     名称大小,以字符为单位,或0表示从字符串

自动计算大小

CASE_SENSITIVE     名称比较应区分大小写;非区分大小写的比较仅适用于ASCII字符

返回 找到孩子的指针,如果没有找到则为0。

知道为什么会这样或者我做错了什么?

由于

2 个答案:

答案 0 :(得分:1)

您对XML'元素节点'(即root,a,b等)和RapidXML的“解析器节点”(由解析器生成)(包括数据节点)感到困惑。

您可以查看节点的type()以确定它是否是数据节点,或使用parse_no_data_nodes解析标记。

答案 1 :(得分:0)

来自Rapidxml文档

   enum node_type
   ...
    Values

    node_document     A document node. Name and value are empty.
    node_element      An element node. Name contains element name.
                      Value contains text of first data node.
    node_data         A data node. Name is empty. Value contains data text.
    node_cdata        A CDATA node. Name is empty. Value contains data text.
    node_comment      A comment node. Name is empty. Value contains comment text.
    node_declaration  A declaration node. Name and value are empty. Declaration 
                      parameters (version, encoding and standalone) are 
                      in node attributes.
    node_doctype      A DOCTYPE node. Name is empty. Value contains DOCTYPE text.
    node_pi           A PI node. Name contains target. Value contains instructions.

正如罗迪指出的那样,你应该检查&#34; rapidXML&#34;节点类型。在您的示例中执行类似

的操作
    if (currentNode->first_node() != 0 && currentNode->type () == node_element) 
    { 
        // this node has children, search for them 
    }