2017-07-20 5 views
-5

C++を使用してodx-fファイルを解析したいと思います。しかし、私はそれを解析する方法の一例を見つけることができません。私はこのサイトを初めて使っています。このコードを使ってこの問題を解決するのを手伝ってください。前もって感謝します。cppでodx-fファイルを解析する方法

+3

ファイルフォーマットの仕様を読み、それに応じて解析します。すべてのファイルはバイト配列です。書式指定では、これらのバイトの意味を説明しています。または、あなたのために仕事をしている第三者図書館を使用してください。 – Ron

+0

は、cppで利用できるodxファイルパーサーですか? – Rajeev

+0

あなたはこれを行うための第三者のライブラリをお勧めしますか? – Rajeev

答えて

0

フラッシュコンテナデータを含むodx-fファイル。 C++で.odx-fファイルを解析するには、任意のXMLパーサー(つまり、rapidxmlxercesLibXML2C++ Wrapperなど)を使用できます。次の例では、SHORT-NAMEのすべてをECU-MEMSECU-MEM-CONNECTORSと表示するためにrapidxmlを使用します。 ECU-MEM以下のすべての要素にアクセスするには、同じメカニズムを適用できます(アプリケーションで.odx-fファイルから必要なデータによって異なります)。

#include <iostream> 

#include "rapidxml/rapidxml.hpp" 
#include "rapidxml/rapidxml_utils.hpp" 

int main(int argc, char *argv[]){ 
    rapidxml::xml_document<> doc; 
    rapidxml::file<> xmlFile("myFile.odx-f"); 
    doc.parse<0>(xmlFile.data()); 
    rapidxml::xml_node<>* flashContainer = doc.first_node("ODX")->first_node("FLASH"); 
    if(flashContainer){ 
    std::cout << flashContainer->first_node("SHORT-NAME")->value() << std::endl; /* prints the shortname of the flash container */ 
    for (rapidxml::xml_node<>* ecuMem = flashContainer->first_node("ECU-MEMS")->first_node("ECU-MEM"); ecuMem; ecuMem = ecuMem->next_sibling("ECU-MEM")) { 
     /* iterates over all ecu memory descriptors */ 
     std::cout << ecuMem->first_node("SHORT-NAME")->value() << std::endl; /* prints the shortname of the ecu memory descriptor */ 
    } 
    for (rapidxml::xml_node<>* ecuMemCon = flashContainer->first_node("ECU-MEM-CONNECTORS")->first_node("ECU-MEM-CONNECTOR"); ecuMemCon; ecuMemCon = ecuMemCon->next_sibling("ECU-MEM-CONNECTOR")) { 
     /* iterates over all ecu memory connectors */ 
     std::cout << ecuMemCon->first_node("SHORT-NAME")->value() << std::endl; /* prints the shortname of the ecu memory connector */ 
    } 
    } 
    return 0; 
} 

odxを解析するライブラリもあります。通常、彼らは商用利用をターゲットにしているので高価になるでしょうが、ODX-LibというLGPLv2でライセンスされているライブラリが1つあります。ただし、2014年以降、Java(JNIはC++からのアクセスが必要)から更新されていません。

関連する問題