XMLUnit-2 игнорирует определенные вложенные XML элементы - PullRequest
0 голосов
/ 10 апреля 2020

Мой XML немного сложен, и я должен игнорировать некоторые entry из сравнения, как бы я смог этого достичь?

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE ResourceObject PUBLIC "my_corp.dtd" "my_corp.dtd">
<ResourceObject displayName="TESTNGAD\AggUserFSP test" identity="CN=AggUserFSP test,OU=FSPAggeFrame,OU=unittests,DC=TestNGAD,DC=local" objectType="account" uuid="{97182a65-61f2-443c-b0fa-477d0821d8c4}">
   <Attributes>
     <Map>
       <entry key="accountFlags">
         <value>
           <List>
             <String>Normal User Account</String>
             <String>Password Cannot Expire</String>
           </List>
         </value>
       </entry>
       <entry key="homePhone" value="6555"/>
       <entry key="l" value="Pune"/>
       <entry key="memberOf">
         <value>
           <List>
             <String>CN=FSPGRP2,OU=ADAggF,OU=unittests2,DC=AUTODOMAIN,DC=LOCAL</String>
             <String>CN=FSPGRP1,OU=ADAggF,OU=unittests2,DC=AUTODOMAIN,DC=LOCAL</String>
             <String>CN=LocalAggFrame,OU=FSPAggeFrame,OU=unittests,DC=TestNGAD,DC=local</String>
           </List>
         </value>
       </entry>
       <entry key="objectClass">
         <value>
           <List>
             <String>top</String>
             <String>person</String>
             <String>organizationalPerson</String>
             <String>user</String>
           </List>
         </value>
       </entry>
       <entry key="sn" value="test"/>
       <entry key="st" value="MH"/>
       <entry key="streetAddress" value="SB ROAD"/>
       <entry key="title" value="QA"/>
       <entry key="userPrincipalName" value="AggUserFSP test@TestNGAD.local"/>
     </Map>
   </Attributes>
 </ResourceObject>

Я пытался

Diff diff = DiffBuilder
             .compare(control)
             .withTest(test)
             .checkForSimilar().checkForIdentical()
             .normalizeWhitespace()
             .ignoreComments()
             .ignoreWhitespace()
             .withNodeFilter(node -> !(node.getNodeName().equals("accountFlags") ||
                            node.getNodeName().equals("homePhone"))).build();

Но это не работает. Как я должен игнорировать некоторые XML entry здесь?

1 Ответ

0 голосов
/ 11 апреля 2020

Ни "accountFlags", ни "homePhone" не являются именами элементов, поэтому мой фильтр не будет ничего совпадать.

NodeFilter должен возвращать true, если не выполняются все следующие условия

  • узел на самом деле является элементом
  • имеет атрибут с именем "ключ"
  • значение этого атрибута - "accountFralgs" или "homePhone"
    private boolean filter(final Node n) {
        if (n instanceof Element) {
            final String attrValue = ((Element) n).getAttibute("key");
            // attrValue is th eempty string if the attribute is missing
            return !("accountFlags".equals(attrValue) || "homePhone".equals(attrValue));
        }
        return true;
    }
...