从 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 读取值?

C ++中的JNI将文件读取到jbyteArray

C ++中的JNI将文件读取到jbyteArray

如何用C++读取XML中的xsd信息

从文件中读取字符串并将其不同部分保存在 C++ 中的不同变量中

C++读取XML文件