2015-06-02 5 views
1

Я только что загрузил библиотеку pugixml, и я пытаюсь адаптировать ее к моим потребностям. Он в основном ориентирован на стиль DOM, который я не использую. Хранилище данных я выглядит следующим образом:Как читать узлы с помощью pugixml?

<?xml version="1.0" encoding="UTF-8"?> 
<profile> 
    <points> 
     <point> 
      <index>0</index> 
      <x>0</x> 
      <y>50</y> 
     </point> 
     <point> 
      <index>1</index> 
      <x>2</x> 
      <y>49.9583</y> 
     </point> 
     <point> 
      <index>2</index> 
      <x>12</x> 
      <y>50.3083</y> 
     </point> 
    </points> 
</profile> 

Pugixml guide говорит:

Обычно для хранения данных в виде текстового содержимого некоторого узла - то есть Это узел. В этом случае узел не имеет значения, но вместо этого имеет дочерний элемент типа node_pcdata со значением «Это узел». pugixml предоставляет дочерние функции child_value() и text() для анализа таких данных.

Но у меня возникла проблема с использованием этих методов, я не получаю значения узлов.

#include "pugixml.hpp" 

#include <string.h> 
#include <iostream> 

int main() 
{ 
    pugi::xml_document doc; 
    if (!doc.load_file("/home/lukasz/Programy/eclipse_linux_projects/xmlTest/Debug/pidtest.xml")) 
     return -1; 

    pugi::xml_node points = doc.child("profile").child("points"); 

    for (pugi::xml_node point = points.first_child(); point; point = points.next_sibling()) 
    { 
     // ? 
    } 


    return 0; 
} 

Как считывать индексы, значения x и y внутри for? Я обольстил бы всю помощь.

ответ

1

Есть несколько способов, документированы на странице быстрого старта:

Могу ли я предложить Xpath?

#include <pugixml.hpp> 
#include <iostream> 

int main() 
{ 
    pugi::xml_document doc; 

    if (doc.load_file("input.txt")) { 
     for (auto point : doc.select_nodes("//profile/points/point")) { 
      point.node().print(std::cout, "", pugi::format_raw); 
      std::cout << "\n"; 
     } 
    } 
} 

Печать

<point><index>0</index><x>0</x><y>50</y></point> 
<point><index>1</index><x>2</x><y>49.9583</y></point> 
<point><index>2</index><x>12</x><y>50.3083</y></point> 
+0

Я нахожу «http://pugixml.org/docs/samples/traverse_rangefor.cpp» наиболее удобные для меня, так как мне нужно собрать эти значения к й и y векторов. – Bremen

+1

http://paste.ubuntu.com/11518469/ – sehe

Смежные вопросы