如何在 C++ 中从 xml 整个输出数据中提取特定数据
How to extract a perticular data from xml whole output data in C++
我有一个 C++ 函数,它在控制台上打印整个 xml 输出数据。这个数据有很多元素。我想在控制台上打印特定元素。
我的函数如下所示:
void SampleEventListner::OnBarcodeEvent(short int eventType, std::string & pscandata){
cout << pscandata << endl;
}
上面的代码正在打印输出,如所附照片。在许多元素中,我只需要打印数据标签。我们应该怎么做?。谢谢。
您可以使用开源 tinyxml2 库。
我喜欢用pugixml;小巧轻便,速度快。
#include <iostream>
#include "pugixml.hpp"
std::string XML = "<outArgs>\
<scannerID>1</scannerID>\
<arg-xml>\
<scandata>\
<modelnumber>DS9308-SR00004ZZWW</modelnumber>\
<serialnumber>19361523701373 </serialnumber>\
<datalabel>0x68 0x74 0x68 0x74 0x68 0x74 0x68 0x74 0x68 0x74 0x68 0x74 0x68 0x74</datalabel>\
<rawdata>0x00 0x01 0x00 0x01 0x00 0x01 0x00 0x01 0x00 0x01 0x00 0x01 0x00 0x01</rawdata>\
</scandata>\
</arg-xml>\
</outArgs>";
void PrintTag(std::string &pscandata)
{
pugi::xml_document DOM = pugi::xml_document();
pugi::xml_parse_result result = DOM.load_string(pscandata.c_str(), pugi::parse_default);
if (result)
std::cout << DOM.select_node("//datalabel").node().first_child().value() << "\n";
else
std::cout << "Error parsing XML. Offset:" << result.offset;
}
int main(int argc, char *argv[])
{
PrintTag(XML);
}
我有一个 C++ 函数,它在控制台上打印整个 xml 输出数据。这个数据有很多元素。我想在控制台上打印特定元素。
我的函数如下所示:
void SampleEventListner::OnBarcodeEvent(short int eventType, std::string & pscandata){
cout << pscandata << endl;
}
上面的代码正在打印输出,如所附照片。在许多元素中,我只需要打印数据标签。我们应该怎么做?。谢谢。
您可以使用开源 tinyxml2 库。
我喜欢用pugixml;小巧轻便,速度快。
#include <iostream>
#include "pugixml.hpp"
std::string XML = "<outArgs>\
<scannerID>1</scannerID>\
<arg-xml>\
<scandata>\
<modelnumber>DS9308-SR00004ZZWW</modelnumber>\
<serialnumber>19361523701373 </serialnumber>\
<datalabel>0x68 0x74 0x68 0x74 0x68 0x74 0x68 0x74 0x68 0x74 0x68 0x74 0x68 0x74</datalabel>\
<rawdata>0x00 0x01 0x00 0x01 0x00 0x01 0x00 0x01 0x00 0x01 0x00 0x01 0x00 0x01</rawdata>\
</scandata>\
</arg-xml>\
</outArgs>";
void PrintTag(std::string &pscandata)
{
pugi::xml_document DOM = pugi::xml_document();
pugi::xml_parse_result result = DOM.load_string(pscandata.c_str(), pugi::parse_default);
if (result)
std::cout << DOM.select_node("//datalabel").node().first_child().value() << "\n";
else
std::cout << "Error parsing XML. Offset:" << result.offset;
}
int main(int argc, char *argv[])
{
PrintTag(XML);
}