读出XML会在C ++中提供意外的输出

时间:2016-01-27 19:55:21

标签: c++ xml rapidxml

我有一个关于从XML文件中读取的问题。

我的XML文件:

<?xml version="1.0" encoding="UTF-8"?>
    <level>
       <terrain name="terrain" mesh="terrain.x" texture="terrain.bmp" position="011"></terrain>
       <skybox name="skybox" mesh="skybox.x" left="left.jpg" right="right.jpg" bottom="bottom.jpg" top="top.jpg" back="back.jpg" front="front.jpg" position="111"></skybox>
       <entity name="tiger" mesh="tiger.x" texture="tiger.bmp" position="000"></entity>
</level>

我的代码:

rapidxml::xml_document<> doc;
rapidxml::xml_node<>* root;

std::ifstream file("level\\noob.xml");

    std::vector<char> buffer((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
    buffer.push_back('\0');

    doc.parse<0>(&buffer[0]);

    root = doc.first_node("level");

    for (rapidxml::xml_node<>* terrain = root->first_node("terrain"); terrain; terrain = terrain->next_sibling())
    {
        std::cout << terrain->first_attribute("name")->value() << std::endl;
    }

所以我只想打印地形的名称。但运行时的结果是:

terrain
skybox
tiger

我检查节点&#34;地形&#34;但它仍会打印节点&#34; skybox&#34;和老虎&#34;。怎么样?

1 个答案:

答案 0 :(得分:1)

for循环从节点“terrain”开始,然后进入兄弟姐妹,即天空盒和老虎。