Ошибка получения первого дочернего элемента узла с tinyxml2 - PullRequest
0 голосов
/ 05 марта 2020

У меня есть этот XML файл

<?xml version="1.0" encoding="UTF-8"?>
<scene>
  <file>sphere.d3</file>
</scene>

И эта функция, которая должна поместить все элементы "файла" в вектор

vector<string> loadXML(string file){

    vector<string> files;

    XMLDocument xml_doc;
    xml_doc.LoadFile(file);

    if(xml_doc.ErrorID() != 0) {
        cout << xml_doc.ErrorName() << endl;
        return files;
    }

    XMLNode* scene = xml_doc.FirstChild();
    if(scene == nullptr){
        cout << "No Root Found\n" << endl;
        return files;
    }

    string temp;

    XMLElement* shape = scene -> FirstChildElement("file"); //error getting this element
    if(shape == nullptr){
        cout << "Error Reading XML file\n";
        return files;
    }

    temp = shape -> GetText();
    files.push_back(temp);

    while(shape != nullptr){
        shape = shape -> NextSiblingElement("file");
        if(shape == nullptr){
            cout << "Error Reading XML file";
            return files;
        }
        temp = shape -> GetText();
        files.push_back(temp);
    }

    return files;

}

, однако, при попытке получить первый элемент «file» из root дает мне нулевое ptr. любая помощь будет очень признательна. Спасибо

1 Ответ

0 голосов
/ 14 марта 2020

Пожалуйста, попробуйте сделать это следующим образом:

tinyxml2::XMLElement* pScene = xml_doc.FirstChildElement("Scene");
if (pScene != nullptr)
{
    //...
}

Вот так я читаю первый элемент из файла данных XML и не сталкиваюсь с проблемами.

...