Я хочу проанализировать файл odx-f с помощью C ++. Но я не могу найти ни одного примера, как разобрать его. Я новичок в этом сайте, не могли бы вы помочь мне решить эту проблему с примером кода? Заранее спасибо.
odx-f файлы, содержащие данные флэш-контейнера. Для разбора файла .odx-f в C ++ вы можете использовать любой XML-парсер (т.е. rapidxml, Xerces, LibXML2 с C ++ Wrapper, …). В следующем примере будет использоваться rapidxml для печати SHORT-NAME
из всех ECU-MEMS
а также ECU-MEM-CONNECTORS
, Чтобы получить доступ ко всем другим элементам ниже 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; обычно они будут дорогими, поскольку они предназначены для коммерческого использования, но есть одна библиотека, лицензируемая в рамках LGPLv2, которая называется ODX-Lib. Однако он не обновляется с 2014 года и в Java (JNI требуется для доступа из C ++).
Других решений пока нет …