Сравнение двух XML-файлов для элементов и атрибутов в C ++ - PullRequest
0 голосов
/ 08 апреля 2019

Я хочу сравнить 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>

...