Пустой документ PugiXML без ошибок

У меня есть следующий XML:

<?xml version="1.0" encoding="utf-8"?>
<jack>
    <client name="Music Player Daemon">
        <port name="left">
            <connection port="jamin:in_L" />
        </port>
        <port name="right">
            <connection port="jamin:in_R" />
        </port>
    </client>
</jack>

Я пытаюсь разобрать его с помощью PugiXML, но после загрузки мой документ пуст, в описании результата нет ошибок:

pugi::xml_document doc;
pugi::xml_parse_result result = doc.load("/location/filename.xml");
std::cout << "Load result: " << result.description() << std::endl;

но это пустой документ:

std::size_t numitens = std::distance(doc.begin(), doc.end());
std::cout << numitens << std::endl;

Выход:

Load result: No error
0

Я думаю, что XML не проблема, верно?

XML генерируется другим приложением, поэтому я не могу его изменить. Если возникнут проблемы с XML, мне нужно будет изменить синтаксический анализатор XML? TinyXML или libxml++?


person Victor Aurélio    schedule 26.06.2013    source источник


Ответы (1)


doc.load() загружает строку, а не файл. Вы должны использовать doc.load_file().

В идеале синтаксический анализ строки «/location/filename.xml» должен был завершиться ошибкой; есть сложные причины, по которым это не так, в основном связанные с обратной совместимостью.

person zeuxcg    schedule 27.06.2013
comment
спасибо, теперь xml загружается успешно, я могу doc.child(jack); но doc.root () не «джек», почему? - person Victor Aurélio; 27.06.2013
comment
doc.root() является синонимом doc; этот член на самом деле принадлежит xml_node, поэтому он не предназначен для использования в xml_document. Вы ищете doc.document_element(). - person zeuxcg; 27.06.2013