【问题标题】:How to extract a perticular data from xml whole output data in C++如何从 C++ 中的 xml 整个输出数据中提取特定数据
【发布时间】:2020-10-22 18:47:51
【问题描述】:

我有一个 C++ 函数,可以在控制台上打印整个 xml 输出数据。这个数据有很多元素。我想在控制台上打印特定元素。

我的函数如下所示:

 void SampleEventListner::OnBarcodeEvent(short int eventType, std::string & pscandata){
    cout << pscandata << endl;
}

上面的代码正在打印输出,如所附照片。在许多元素中,我只需要打印数据标签。我们应该怎么做?。谢谢

【问题讨论】:

    标签: c++ c xml xml-parsing barcode


    【解决方案1】:

    我喜欢用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);
    }
    

    【讨论】:

      【解决方案2】:

      你可以用开源的tinyxml2库来做。

      【讨论】:

      • 我可以打印到控制台吗?
      猜你喜欢
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      • 2014-02-02
      • 1970-01-01
      • 1970-01-01
      • 2013-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多