如何使用 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的主要内容,如果未能解决你的问题,请参考以下文章