0

boost::regex に問題があります。この解決策は、各一致で 1 つの結果に対してのみ機能します

boost::regex regex("id=\"(.*?)\""); // should I use this "id=\"(.*?)\"(.*?)<value>(.*?)</value>"?
boost::sregex_token_iterator iter(xml.begin(), xml.end(), regex, 1); // 1 because I just need text inside quotes
boost::sregex_token_iterator end;

そして今解析された文字列

<x id="first">
<value>5</value>
</x>
<x id="second"> 
<value>56</value>  
</x>  
etc... 

ここで問題は、ID と値を一度に解析して、マッチ ループ内で両方を取得する方法です。

for( ; iter != end; ++iter ) {
  std::string id(iter->first, iter->second);
  std::string value(?????);
}
4

1 に答える 1

1

Boost.PropertyTreeには、正規表現の代わりに使用できる XML パーサーが含まれています。

#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <boost/foreach.hpp>
...    
using boost::property_tree::ptree;
ptree pt;
read_xml(istreamOrFilename, pt);
BOOST_FOREACH(ptree::value_type &v, pt) {
    std::string id(v.second.get<std::string>("<xmlattr>.id"));
    std::string value(v.second.get<std::string>("value").data());    
}
于 2012-04-16T01:45:45.503 に答える