如何在 C++ 中解析 XML 字符串中的数据
How to parse data from an XML string in C++?
我有一个来自文件的字符串。例如,从XML文件。我只想知道格式化以下标签中内容的最简单方法是什么?
<member names="John:Frank" family="Smith:Wesson"/>
我只想要John
Frank
Smith
Wesson
,每个字符串都是不同的字符串。
使用 XML 解析器解析 xml,然后在 ':"?使用解析器作为 RapidXML
如果你喜欢Boost Spirit中的快速'n脏语法:
在科里鲁现场观看
#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
我会将 substr 与查找器结合使用
- 查找字符串中的第一个
"
位置。 - 从找到的第一个位置到从最后一个第一个位置找到的第一个位置的子字符串。您现在有 2 个仓位,开仓和平仓
"
- 根据
:
以与刚才相同的方式拆分生成的字符串。 - 在字符串中有开始和关闭
"
时执行此操作
您的问题完全是关于字符串操作的,与 XML 解析无关。
要从<member names="John:Frank" family="Smith:Wesson"/>
中获取四个名称非常容易,您只需要:
-
把
<member names="John:Frank" family="Smith:Wesson"/>
当成string
。 -
根据
"
找到两个大的子字符串,你会得到John:Frank
和Smith:Wesson
。 -
对于每个子字符串,根据
:
进一步拆分它们,你会得到John
、Frank
、Smith
和Wesson
。做!
相关文章:
- 如何在不进行任何其他修改的情况下"pretty print" C++的XML字符串?
- 在 c++ 中将简单的 xml 解析为字符串
- find_last_of不适用于 xml 字符串
- 将XML字符串资源嵌入C 项目
- 提取 XML 标记中双 qoutes 之间的子字符串
- 将字符串转换为 XML 并使用提升更新值字段
- 替换字符串C++中无效的XML unicode序列
- 如何使用libxml2从C 中的XML文件中检索节点和特定元素字符串而不使用XPATH
- 如何将XML节点数据转换为QT中的字符串
- 如何使用XPath使用libxml2从C 中的XML文件中检索节点和特定元素字符串
- 如何在OpenCV中读取XML字符串
- 如何在 C++ 中解析 XML 字符串中的数据
- Winrt/XML/C++:从字符串值中获取颜色
- 将xml字符串嵌套到xml元素中的语法
- 从XML解析字符串时添加到n的反斜杠
- 如何在c++中将xml文件的整个源代码存储为字符串
- 如何使用 libxml++ 解析 XML 字符串而不是 XML 文件
- 代码合成XSD解析/数据绑定xml字符串,而不是xml文件
- 作为XML字符串提取请求/响应
- 使用XML字符串填充双精度数对的向量