如何使用 C++ 解析带有 ParameterName 和 ParameterValue 的 XML

Posted

技术标签:

【中文标题】如何使用 C++ 解析带有 ParameterName 和 ParameterValue 的 XML【英文标题】:how to parse XML with ParameterName and ParameterValue using c++ 【发布时间】:2019-06-04 10:21:35 【问题描述】:

我收到一个带有凭据的 xml 文件,我需要在 c++11 中解析它的值。 问题是我无法解析这种特定的 xml 格式(格式 1):

<Parameters>
    <Parameter ParameterName="AccessKey" ParameterValue="ABC"/> 
    <Parameter ParameterName="SecretKey" ParameterValue="XYZ"/> 
</Parameters>

我对 boost::property_tree 很熟悉,但我只能解析以下格式(格式 2):

<Parameters>
    <AccessKey>ABC</AccessKey>
    <SecretKey>XYZ</SecretKey>
</Parameters>

下面是我用来解析xml格式2的代码:

#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
namespace pt = boost::property_tree;

bool getCredentialsfromXml(const std::string &xmlFileName, Credentials& credentials)
   
    pt::ptree tree;
    pt::read_xml(xmlFileName, tree);

    // 1. AccessKey
    credentials.m_accessKey = tree.get_optional<std::string>("Parameters.AccessKey");

    // 2. SecretKey
    credentials.m_secretKey = tree.get_optional<std::string>("Parameters.SecretKey");

    return true;

有没有办法修改我的代码来解析 xml 格式 1? 或任何其他方式来解析 c++11 中的 xml 格式 1?

提前致谢!

【问题讨论】:

有很多可用的 XML 加载器和解析器,其中许多用于 C++。您可能需要稍微搜索一下以找到其中一些库。 我想你可以看看this。但你可以自己找到这个链接:) 你可以试试这个Reading structures from XML 【参考方案1】:

如果您想坚持使用 boost::propery_tree 并且不需要了解(和解析)更多 XML,也许以下 *** 答案会对您有所帮助:How are attributes parsed in Boost.PropertyTree?

您的新格式使用 XML attributes,而您的旧格式仅使用 XML elements。你不需要知道一切。但是您需要了解技术术语(例如 attribute),这样您就可以像我一样使用 Google 搜索。 ;-)

【讨论】:

非常感谢,我不熟悉术语属性和元素。我在您附加的链接中找到了答案。谢谢!

以上是关于如何使用 C++ 解析带有 ParameterName 和 ParameterValue 的 XML的主要内容,如果未能解决你的问题,请参考以下文章

C++线程池ThreadPool实现解析

在 C++ 中解析 .dat 文件

如何使用 ClangCodeModel 插件在 QtCreator 中设置 C++ 标准?

如何使用 块 C++ 解析文件

如何使用 C++ 解析 json 数组?

解析/处理 C++ 文件的选项