Сравните два xml на основе тега как уникальный тег - PullRequest
0 голосов
/ 10 января 2019

Я занимаюсь разработкой приложения, в котором мне нужно сравнить 2 xml на основе уникального тега IPADDRESS. Пример: input1.xml

          <DeviceList>
                <Device>
                  <IPAddress>20.20.1.20</IPAddress>
                  <HostName>Device1</HostName>
                </Device>
                <Device>
                  <IPAddress>20.20.1.21</IPAddress>
                  <HostName>Device2</HostName>
                </Device>
                <Device>
                  <IPAddress>20.20.1.22</IPAddress>
                  <HostName>Device3</HostName>
                </Device>
           </DeviceList>

            inpu2.xml
          <DeviceList>
                <Device>
                  <IPAddress>20.20.1.23</IPAddress>
                  <HostName>Device1</HostName>
                </Device>
                <Device>
                  <IPAddress>20.20.1.21</IPAddress>
                  <HostName>Device3</HostName>
                </Device>
                <Device>
                  <IPAddress>20.20.1.22</IPAddress>
                  <HostName>Device3</HostName>
                </Device>
         </DeviceList>

Result should be two xmls 
output1 : ipadrees are present in input2.xml and not present in input.xml1


  <DeviceList>
      <Device>
          <IPAddress>10.20.1.23</IPAddress>
          <HostName>Device1</HostName>
      </Device>
  </DeviceList>

output2 : Remaining device list in input1.xml

 <DeviceList>
          <Device>
      <IPAddress>10.20.1.20</IPAddress>
      <HostName>Device1</HostName>
    </Device>
    <Device>
      <IPAddress>10.20.1.21</IPAddress>
      <HostName>Device2</HostName>
    </Device>
    <Device>
      <IPAddress>10.20.1.22</IPAddress>
      <HostName>Device3</HostName>
    </Device>
  </DeviceList>

Я пытался использовать XMLUNIT Java API, но не смог сделать, поскольку мы должны фильтровать только по тегу IPAddress. Пожалуйста, помогите и спасибо заранее.

1 Ответ

0 голосов
/ 11 января 2019

Я предполагаю, что вы собираете различия между этими двумя документами и хотите выдать те, где разница равна CHILD_LOOKUP, и использовать только те, где сторона, представляющая input1, равна нулю.

Здесь вам нужно то же самое, что и в примере с таблицей HTML из https://github.com/xmlunit/user-guide/wiki/SelectingNodes - вам нужен ElementQualifier, который обычно соответствует элементам XML по имени, но в особом случае элемента Device, который вы хотите чтобы соответствовать тем элементам, которые имеют одинаковое текстовое содержимое внутри их IPAddress дочернего элемента.

Это было бы что-то вроде

ElementSelectors.conditionalBuilder()
    .whenElementIsNamed("Device")
        .thenUse(ElementSelectors.byXPath("./IPAddress", ElementSelectors.byNameAndText))
    .elseUse(ElementSelectors.byName)
    .build();
...