比较C ++中元素和属性的两个xml文件

时间:2019-04-08 12:35:47

标签: c++ xml xml-parsing visual-studio-2017

我想比较xml文件(B)和C ++中现有的xml文件(A),两个文件应该具有相同的节点和属性,但是文件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>

0 个答案:

没有答案