如何在C ++中解析XML字符串中的数据?

时间:2014-01-08 12:40:53

标签: c++ xml

我有一个文件中的字符串。例如,来自XML文件.. 我只想知道从以下标签格式化内容的最简单方法是什么?

<member names="John:Frank" family="Smith:Wesson"/>

我只想要John Frank Smith Wesson,每一个都是不同的字符串。

4 个答案:

答案 0 :(得分:2)

使用XML解析器解析xml,然后在':'上拆分值?使用解析器RapidXML

答案 1 :(得分:1)

如果您喜欢在Boost Spirit中快速&n;脏语法:

查看 Live on Coliru

#include <boost/spirit/include/qi.hpp>

namespace qi = boost::spirit::qi;

int main()
{
    std::string const example = "<member names=\"John:Frank\" family=\"Smith:Wesson\"/>";

    std::vector<std::string> data;

    if (qi::parse(begin(example), end(example).
             *(
                 qi::omit [ *~qi::char_('"') ] >> '"' >> qi::as_string [ *~qi::char_("\":") ] % ':' >> '"'
              ),
             data))
    {
        for (auto const& item : data)
            std::cout << item << "\n";
    }
}

输出

clang++ -std=c++11 main.cpp && ./a.out
John
Frank
Smith
Wesson

答案 2 :(得分:0)

我会将substr与finders结合使用

  • 找到字符串中的第一个"位置。
  • 从第一个位置找到的子串从第一个位置开始找到第一个位置。您现在有2个职位,即开始和结束"
  • 基于:以与您刚才相同的方式拆分结果字符串。
  • 在字符串
  • 中打开和关闭"时执行此操作

答案 3 :(得分:0)

你的问题是关于字符串操作,而不是XML解析。

要从<member names="John:Frank" family="Smith:Wesson"/>获取四个名称非常简单,您只需要:

  1. <member names="John:Frank" family="Smith:Wesson"/>视为string

  2. 根据"查找两个大的子字符串,您将获得John:FrankSmith:Wesson

  3. 对于每个子字符串,根据:进一步拆分它们,您将获得JohnFrankSmithWesson。完成!