Из XML-файла свойства java я хочу найти каждый элемент с именем entry
(внутри корневого элемента properties
). Затем поместите значение своего атрибута key
в std::map<std::string, std::string>
как ключ и содержимое элемента (между <entry>
и </entry>
) в качестве значения. До сих пор я использую boost property_tree. Но поскольку я не знаком с разбором XML-документов, мне было интересно, есть ли какие-то подводные камни, которые я здесь не вижу, или есть более простой подход, чем этот.Анализ xml-файла с boost property_tree и размещение выделенного содержимого на std :: map
std::map<std::string, std::string> mMap;
BOOST_FOREACH(boost::property_tree::ptree::value_type &v, pt.get_child("properties"))
{
if (v.first == "entry")
{
std::string sVal = v.second.get_child("<xmlattr>.key").data();
if (sVal.compare("Foo") == 0)
mMap[sVal] = v.second.data();
else if (sVal.compare("Bar") == 0)
mMap[sVal] = v.second.data();
else if(...)
}
}
XML:
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<entry key="Foo">This is a sentence.</entry>
<entry key="Bar">And another one.</entry>
<entry key=...
</properties>
Спасибо! Я должен был упомянуть, что я не могу использовать C++ 11. – tzippy
Тогда просто используйте свой код (по вкусу). Я надеюсь, что ответ помог, даже если образец не сделал – sehe
Да, это определенно помогло, указав, что 'insert()' лучший способ избежать дублирования записей. Кроме того, я заметил, что мне не нужно сравнивать ключи, я могу просто вставить все. – tzippy