2013-06-26 4 views
0

Я никогда следующий XML:PugiXML пустой документ без ошибок

<?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 ++?

ответ

1

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

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

+0

спасибо, теперь xml загружен успешно, я могу doc.child ("jack"); но doc.root() не «jack» почему? –

+0

doc.root() является синонимом документа; член на самом деле принадлежит xml_node, поэтому он не предназначен для использования в xml_document. Вы ищете doc.document_element(). – zeuxcg