2016-12-12 8 views
0

У меня есть файл XML со следующей структурой:Извлечение всех узлов узла в файле XML по Pugixml C++

<Employee> 
    <Address> 
     <Name>XYZ</CustomerName> 
     <Street>street no. 1</Street> 
     <City>current city</City> 
     <Country>country</Country> 
    </Address> 
</Employee> 

Я хочу, чтобы извлечь значения всех узлов узла Address и хотите сохраняйте значения в векторе строки (то есть std::vector<std::string> EmployeeAdressDetails).

Как я могу извлечь узлы в цикле, а не извлекать значения один за другим?

UPDATE: К "Распаковка один за другим", я имею в виду что-то вроде следующего:

xml_node root_node = doc.child("Employee"); 
xml_node Address_node = root_node.child("Address"); 
xml_node Name_node = Address_node .child("Name"); 
xml_node Street_node = Address_node .child("Street"); 
xml_node City_node = Address_node .child("City"); 
xml_node Country_node = Address_node .child("Country"); 
+0

Не добывающие узлы в петле «добывающие их один за другим»? Можете ли вы объяснить разницу между ними? Я не совсем уверен, что вы имеете в виду. – Borgleader

+0

@Borgleader: Я обновил свой вопрос, чтобы уточнить, что я подразумеваю под «извлечением по одному». Пожалуйста, посмотрите. – skm

ответ

0

Вы можете сделать это:

for(auto node: doc.child("Employee").child("Address").children()) 
{ 
    std::cout << node.name() << ": " << node.text().as_string() << '\n'; 
} 

Или предварительно C++11 компиляторов:

pugi::xml_object_range<pugi::xml_node_iterator> nodes = doc.child("Employee").child("Address").children(); 

for(pugi::xml_node_iterator node = nodes.begin(); node != nodes.end(); ++node) 
{ 
    std::cout << node->name() << ": " << node->text().as_string() << '\n'; 
} 

Выход:

Name: XYZ 
Street: street no. 1 
City: current city 
Country: country 
+0

'for (auto node: doc.child (« Employee »). Child (« Address »). Children())' имеет проблему синтаксиса в соответствии с моей IDE. – skm

+0

Вы используете компилятор, который поддерживает C++ 11? – Borgleader

+0

нет ... Я заменил 'auto' на' xml_node', но я не знаю, для остального синтаксиса – skm

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