c++ - 在 C++ 中将一个简单的 xml 解析为一个字符串
问题描述
输出字符串 xml 具有列表
<?xml version="1.0" encoding="utf-8"?>
<MODEL-LIST>
<MODEL ID="Default1" TYPE="Enhanced Model" />
<MODEL ID="Default2" TYPE="Basic Model" />
</MODEL-LIST>
现在我想将此输出 XML 过滤为格式为char * output = "Enhanced Model-Default1, Basic Model-Default2"
. 您认为进行另一个转换或直接解析为 C++ 类/结构是否很好?
解决方案
我自己想出了答案,它有效,但代码需要清理:它可能不优雅但有效。任何建议,改进都将帮助我提高自己。
我的实际输入是
const char* buf = xmlStr;
int bstrlen = xmlStr.length();
std::string str(buf ? buf : "", bstrlen);
// Vector of string to save tokens
vector <string> tokens;
vector <string> models;
// stringstream class check1
stringstream check1(str);
string intermediate;
// Tokenizing w.r.t. space ' '
while (std::getline(check1, intermediate, '\n'))
{
tokens.push_back(intermediate);
}
for (string token : tokens)
{
std::string first = "MODEL ID=\"";
std::size_t firstLim = token.find(first);
std::string last = "\" TYPE=\"";
std::size_t lastLim = token.find(last);
if ( (firstLim != std::string::npos) && (lastLim != std::string::npos) )
{
std::string modelid = token.substr(firstLim, lastLim - firstLim);
int i = first.size();
modelid = modelid.substr(first.size());
models.push_back(modelid);
std::string modeltype = token.substr(lastLim);
modeltype = modeltype.substr(last.size());
std::string elem = "\"";
std::size_t elemLim = token.find(elem);
modeltype = modeltype.substr(elemLim);
}
}
确切的输入是:
"<?xml version=\"1.0\"?>\r\n<MODEL-LIST>\r\n<MODEL ID=\"450 MHz Default\" TYPE=\"Basic Model\" />\r\n<MODEL ID=\"900 MHz Default\" TYPE=\"Enhanced Model\" />"
推荐阅读
- javascript - 单击echart条形图时如何突出显示条形?
- sql - 从具有公共 UserId 键的许多表的 SQL 查询中返回单行
- flutter - 如何从路由获取参数到其他屏幕?
- ruby-on-rails - 使用 Amazon S3 的 Active Storage 不使用指定的文件名保存,而是使用文件密钥代替
- javascript - Kendo mvc 刷新单元格值
- azure - Azure 表存储:如何在导出/导入期间保存 Unicode 符号?
- javascript - ArcGIS API for Javascript:FeatureLayerCollection 未显示所有要素
- python - 迭代张量作为数组 Tensorflow
- c++ - OpenMP 仅使用一个线程
- python - 当数据为每组的行而不是每组一行时,如何将数据集拆分/分区为训练和测试集