无法使用 pugixml 在循环中使用 XML 节点



>我有一个格式如下的XML文件

<Objects>
    <Object>
        <Id>1</Id>
        <Name>Head</Name>
    </object>
    <Object>
        <Id>2</Id>
        <Name>Right Hand</Name>
    </object>
    <Object>
        <Id>3</Id>
        <Name>Left Hand</Name>
    </object>
    <Object>
        <Id>4</Id>
        <Name>Right hand</Name>
    </object>
    <Object>
        <Id>5</Id>
        <Name>Cup</Name>
    </object>
    <Object>
        <Id>6</Id>
        <Name>Book</Name>
    </object>
</Objects>

我想使用循环通过以下方式逐个对象访问我的文件对象:

xml_node nodeObjects = doc.child("Objects").child("Object");
    for(xml_node_iterator it = nodeObjects.begin(); it != nodeObjects.end(); ++it)
    {
        cout<<"Name = "<<it->child_value("Name")<<endl;
    }

以及:

xml_node nodeObjects = doc.child("Objects");
for(xml_node nodeObject = nodeObjects.first_child(); nodeObject; nodeObject = nodeObject.next_sibling())
    {
        numOfObjects += 1;
        const char *id = nodeObject.child_value("Id");
        const char *name = nodeObject.child_value("Name");
        //cout<<"ID = "<<id<<" Name = "<<name<<endl;
        //cout<<nodeObjects.next_sibling("Object").child_value("Id")<<endl;;
    }

最后:

xml_node nodeObjects = doc.child("Objects");
for(xml_node nodeObjects: nodeObjects.children("Object"))
    {
    }

虽然前两个方法没有打印预期的结果(只有第一次迭代有效),但编译器说第三个方法是语法错误!

任何帮助!

  1. 您的 XML 文件格式不正确 - 结束标记名称应与开始标记匹配,比较区分大小写。请记住始终通过检查 xml_document::load_file 返回值来检查文档是否加载成功。就像现在一样,解析可能会失败,你会得到一个空文档(或者更确切地说,是文档的一部分,直到第一个错误,即只是第一个对象)。

  2. 第一个循环遍历 nodeObject 的子级;要使其正常工作,nodeObjects 应引用 Objects 标记,而不是其第一个 Object 子项。

  3. 第二个和第三个循环看起来不错 - 第三个循环使用 C++11 功能,因此不适用于尚不支持它的编译器。

相关内容

  • 没有找到相关文章

最新更新