Я хочу сравнить XML-файл (B) с существующим XML-файлом (A) в C ++, два файла должны иметь одинаковые узлы и атрибуты, но значения атрибутов в файле B могут отличаться от файла A, и любое значение атрибута не должно пусто в файле B.
Метод грубой силы заключается в сохранении структуры файла A в структурах данных, таких как карты и векторы, но у меня есть 25-30 различных файлов для сравнения.
файл A
<MASTER>
<SERIAL COM="COM1" BAUD_RATE="9600" DATA="8" PARITY="none" STOP="one" RETRY="1000"/>
<GPS COM="COM2" BAUD_RATE="9600" DATA="8" PARITY="none" STOP="one" RETRY="1000"/>
<ARM_STATUS>
<ARM ID="1" STATUS="true" />
<ARM ID="2" STATUS="true" />
<ARM ID="3" STATUS="true" />
<ARM ID="4" STATUS="TRUE" />
<ARM ID="5" STATUS="false" />
<ARM ID="6" STATUS="false" />
<ARM ID="7" STATUS="false" />
<ARM ID="8" STATUS="false" />
</ARM_STATUS>
<MODE_STATUS>
<MODE NAME="FIXED_MODE" STATUS= "FALSE" />
<MODE NAME="VEHICLE_ACTUATED_SPLIT_MODE" STATUS= "TRUE" />
<MODE NAME="VEHICLE_ACTUATED_FULL_MODE" STATUS= "FALSE" />
<MODE NAME="ADAPTIVE_MODE" STATUS = "FALSE" />
<MODE NAME="SEMI_ACTUATED_MODE" STATUS = "FALSE" />
</MODE_STATUS>
</MASTER>
файл B (действительный)
<MASTER>
<SERIAL COM="COM1" BAUD_RATE="9600" DATA="8" PARITY="none" STOP="one" RETRY="1000"/>
<GPS COM="COM2" BAUD_RATE="9600" DATA="8" PARITY="none" STOP="one" RETRY="1000"/>
<ARM_STATUS>
<ARM ID="1" STATUS="true" />
<ARM ID="2" STATUS="true" />
<ARM ID="3" STATUS="false" />
<ARM ID="4" STATUS="false" />
<ARM ID="5" STATUS="false" />
<ARM ID="6" STATUS="false" />
<ARM ID="7" STATUS="false" />
<ARM ID="8" STATUS="false" />
</ARM_STATUS>
<MODE_STATUS>
<MODE NAME="FIXED_MODE" STATUS= "true" />
<MODE NAME="VEHICLE_ACTUATED_SPLIT_MODE" STATUS= "TRUE" />
<MODE NAME="VEHICLE_ACTUATED_FULL_MODE" STATUS= "FALSE" />
<MODE NAME="ADAPTIVE_MODE" STATUS = "FALSE" />
<MODE NAME="SEMI_ACTUATED_MODE" STATUS = "FALSE" />
</MODE_STATUS>
</MASTER>
файл B (неверный)
Примечание ::
-ID значение для элемента отсутствует
<MASTER>
<SERIAL COM="COM1" BAUD_RATE="9600" DATA="8" PARITY="none" STOP="one" RETRY="1000"/>
<GPS COM="COM2" BAUD_RATE="9600" DATA="8" PARITY="none" STOP="one" RETRY="1000"/>
<ARM_STATUS>
<ARM ID="1" STATUS="true" />
<ARM ID="2" STATUS="true" />
<ARM ID="3" STATUS="true" />
<ARM ID="4" STATUS="false" />
<ARM ID="5" STATUS="false" />
<ARM ID="6" STATUS="false" />
<ARM ID="7" STATUS="false" />
<ARM ID="" STATUS="false" />
</ARM_STATUS>
<MODE_STATUS>
<MODE NAME="FIXED_MODE" STATUS= "true" />
<MODE NAME="VEHICLE_ACTUATED_SPLIT_MODE" STATUS= "TRUE" />
<MODE NAME="VEHICLE_ACTUATED_FULL_MODE" STATUS= "FALSE" />
<MODE NAME="ADAPTIVE_MODE" STATUS = "FALSE" />
<MODE NAME="SEMI_ACTUATED_MODE" STATUS = "FALSE" />
</MODE_STATUS>
</MASTER>