Ich habe eine XML-Struktur entlang der Linien von:Wie im Boost-XML-Struktur iterieren :: property_tree
<root>
<SomeElement>
<AnotherElement>
<ElementIWant x="1" y="1"/>
</AnotherElement>
</SomeElement>
<SomeElement>
<AnotherElement>
<ElementIWant x="1" y="1"/>
<ElementIWant x="2" y="1"/>
<ElementIWant x="3" y="1"/>
</AnotherElement>
</SomeElement>
</root>
, die in eine boost::property_tree
gelesen wird, gibt es 1..Many<SomeElement>
s, und dann bei einer beliebigen Tiefe innerhalb dieses Element könnte es sein 1..Many<ElementIWant>
s
gibt es einen Weg über die <ElementIWant>
direkt (in einer einzigen Schleife) in der Reihenfolge iterieren, dass sie appea r im doc?
Ich habe bei equal_range sah
void iterateOverPoints()
{
const char* test =
"<?xml version=\"1.0\" encoding=\"utf-8\"?><root>"
"<SomeElement>"
"<AnotherElement>"
"<ElementIWant x=\"1\" y=\"1\"/>"
"</AnotherElement>"
"</SomeElement>"
"<SomeElement>"
"<AnotherElement>"
"<ElementIWant x=\"1\" y=\"1\"/>"
"<ElementIWant x=\"2\" y=\"1\"/>"
"<ElementIWant x=\"3\" y=\"1\"/>"
"</AnotherElement>"
"</SomeElement>"
"</root>";
boost::property_tree::ptree message;
std::istringstream toParse(test);
boost::property_tree::read_xml(toParse,result_tree);
//Now we need to locate the point elements and set the x/y accordingly.
std::pair< boost::property_tree::ptree::const_assoc_iterator,
boost::property_tree::ptree::const_assoc_iterator > result =
message.equal_range("ElementIWant");
for(boost::property_tree::ptree::const_assoc_iterator it = result.first;
it != result.second; ++it)
{
std::cout << it->first << " : ";
const boost::property_tree::ptree& x = it->second.get_child("<xmlattr>.x");
const boost::property_tree::ptree& y = it->second.get_child("<xmlattr>.y");
std::cout << x.get_value<int>() << "," << y.get_value<int>() << "\n";
}
return;
}
jedoch es Knoten zurück zum Scheitern verurteilt scheint (was ich vermute, weil equal_range auf der Ebene des Baumknoten geliefert arbeitet) Was mich auf die Frage oben bringt. ..
Haben Sie versucht, 'equal_range (" SomeElement.AnotherElement.ElementIWant ");'? Nicht sicher, was das tun wird, wenn es zwei Kopien von SomeElement gibt. –
Explosion aus der Vergangenheit! @TreborRude Ich denke, zu der Zeit hat es sich nicht so verhalten, wie ich es wollte, oder es hat nicht funktioniert. Vielleicht wurde die Bibliothek seither verbessert - aber ich bin im Moment weit von diesem Bereich entfernt. :) Danke für den Vorschlag. – Caribou