使用 RapidXML 解析 XML 文件 - 只解析文件的第一行

Parsing XML file with RapidXML - only parsing first line of files

我在使用 RapidXML 时遇到问题,只能解析我文件的第一行(或者看起来如此)。当我输入示例文件时,它仅获取第一个节点(“map”),没有其他任何内容。解析后我在 Xcode 中设置了一个断点以检查结果,大多数属性似乎都为 NULL 值。有没有人对如何解决这个问题有任何建议?据我了解,解析器应该会产生某种形式的树状结构。也许我对结果数据结构有误解?

这是我的用法:

#include <iostream>
#include "rapidxml_utils.hpp"

using namespace std;

int main(){
    rapidxml::file<> xmlFile("sample.txt.xml");
    rapidxml::xml_document<> doc;
    doc.parse<0>(xmlFile.data());

    cout << "Name of my first node is: " << doc.first_node()->name() << "\n";
    rapidxml::xml_node<> *node = doc.first_node("map");
    cout << "Node map has value " << node->value() << "\n";
    for (rapidxml::xml_attribute<> *attr = node->first_attribute();
         attr; attr = attr->next_attribute())
    {
        cout << "Node foobar has attribute " << attr->name() << " ";
        cout << "with value " << attr->value() << "\n";
    }
}

这是我尝试解析的文件示例:

<?xml version="1.0" encoding="utf-8"?>
<map>
  <room>
    <name>Entrance</name>
    <description>You find yourself at the mouth of a cave</description>
    <item>torch</item>
    <trigger>
      <type>permanent</type>
      <command>n</command>
      <condition>
        <has>no</has>
        <object>torch</object>
        <owner>inventory</owner>
      </condition>
      <print>*stumble* need some light...</print>
    </trigger>
    <border>
      <direction>north</direction>
      <name>MainCavern</name>
    </border>
  </room>
</map>

您混淆了 XML 属性 元素

属性如下所示:<map name="Zork" author="Infocom">

如果要遍历 'tree' 中的所有元素,您确实需要使用 rapidxml first_node()next_sibling() 方法的递归算法。