从 C++ / Unix 中的字符串读取 XML [关闭]
Posted
技术标签:
【中文标题】从 C++ / Unix 中的字符串读取 XML [关闭]【英文标题】:Read XML from a string in C++ / Unix [closed] 【发布时间】:2014-11-27 07:25:57 【问题描述】:我正在寻找一种简单的方法来读取包含在 C++ 中用于 Unix 系统的字符串变量中的 XML。我找到了很多 xml 文件的解决方案,但没有找到很多关于包含在字符串变量中的 XML 的解决方案。
我是否必须使用诸如 find() 之类的函数,或者是否有一个我错过的库可以为我完成这项工作?
编辑:
如果我在一个字符串中有以下 XML,我该如何阅读它? (以 pugixml 为例)
string xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>";
xml += "<people><person><name>Toto</name><age>20</age></person>";
xml += "<person><name>John</name><age>42</age></person></people>";
【问题讨论】:
您想在 C++ 中还是在 unix 命令行中读取 xml? @Leon 在 C++ 中,但我不想要 Windows 的解决方案。 ;) 我无法给出一个明确的答案,因为我从来没有在 C++ 中解析过 xml,但是根据在 python 中使用 lxml 的经验,我认为你应该看看 libxml2 看看What XML parser should I use in C++?和Best open XML parser for C++ 如果你不需要超级duper功能完整但又希望它又快又好用,我推荐pugixml。 【参考方案1】:我会推荐使用 Tinyxml2 库。 特别是 XMLDocument::Parse - 是你最好的选择 (http://grinninglizard.com/tinyxml2docs/classtinyxml2_1_1_x_m_l_document.html#a1819bd34f540a7304c105a6232d25a1f)
在 XMLDocument 中加载您的字符串后 - 您可以通过 tinyxml2 工具进一步浏览它。
文档中的确切示例 -> http://www.grinninglizard.com/tinyxml2docs/_example-3.html
【讨论】:
谢谢,这正是我想要的。在示例中,我只需要用 TiXmlDocument 替换 XMLDocument,用 TiXmlElement 替换 XMLElement。【参考方案2】:这里是一个使用pugixml的例子:
#include <string>
#include <iostream>
#include "pugixml.hpp"
int main()
using namespace pugi;
std::string xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>";
xml += "<people><person><name>Toto</name><age>20</age></person>";
xml += "<person><name>John</name><age>42</age></person></people>";
xml_document doc;
xml_parse_result res = doc.load(xml.c_str());
if(!res)
std::cout << "ERROR: " << res.description() << '\n';
return 1;
for(auto&& person: doc.child("people").children("person"))
std::cout << "name: " << person.child("name").text().as_string() << '\n';
std::cout << " age: " << person.child("age").text().as_string() << '\n';
std::cout << '\n';
输出:
name: Toto
age: 20
name: John
age: 42
【讨论】:
我设法使它与 tinyxml 一起工作,它看起来或多或少相同。太糟糕了,我无法验证 2 个答案,但感谢您的回答。 ;)以上是关于从 C++ / Unix 中的字符串读取 XML [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何从 android 中的 string.xml 读取值?