XMLUNIT: пользовательские селекторы элементов byNameAndText для NestedText - PullRequest
0 голосов
/ 17 сентября 2018

Я сравниваю 2 XML. И я хотел бы игнорировать разницу, даже если book: name текстовое значение окружено bookorg: entity . Я использовал ElementSelectors.byNameAndText. Но я думаю, что я должен настроить этот ElementSelector с чем-то вроде ElementSelectors.InnerNameAndText. Прямо сейчас byNameAndText использует этот метод getMergedNestedText . Но если это не работает по умолчанию.

public static String getMergedNestedText(Node n)
    /*     */ {
        /*  59 */ StringBuilder sb = new StringBuilder();
        /*  60 */ for (Node child : new IterableNodeList(n.getChildNodes())) {
            /*  61 */ if ((child instanceof Text) || (child instanceof CDATASection)) {
                /*  62 */ String s = child.getNodeValue();
                /*  63 */ if (s != null) {
                    /*  64 */ sb.append(s);
                    /*     */ }
                /*     */ }
            /*     */ }
        /*  68 */ return sb.toString();
        /*     */ }

Контроль

            <book:book typeValue="cr">
                <book:name>
                    <bookorg:entity role="urn:contentType:organization">
                        <bookorg:content>Harry Potter</bookorg:content>
                        <bookorg:entityReference role="urn:contentType:organization" guid:guid="urn:entityauthority:o">
                        </bookorg:entityReference>
                    </bookorg:entity>
                </book:name>
                <book:typeCode>C</book:typeCode>
                <book:typeDesc>cr</book:typeDesc>
                <book:supplement>
                    <book:cleanName>Harry Potter</book:cleanName>
                    <book:cleanTimestamp day="17" month="09" year="2012">2012-09-17T06:49:00</book:cleanTimestamp>
                </book:supplement>
            </book:book>

Test

<book:book typeValue="cr">
                    <book:name>Harry Potter</book:name>
                    <book:typeCode>C</book:typeCode>
                    <book:typeDesc>cr</book:typeDesc>
                    <book:supplement>
                        <book:cleanName>Harry Potter</book:cleanName>
                        <book:cleanTimestamp day="17" month="09" year="2012">2012-09-17T06:49:00</book:cleanTimestamp>
                    </book:supplement>
                </book:book>    

Код

    QName bookQName = new QName("http://xyz", "book", "book");
    Map<String, String> mapBookQName = new HashMap<String, String>();
    mapBookQName.put("book", "http://xyz");


    ElementSelector bookNameDescSelector = ElementSelectors.byXPath("./book:name", mapBookQName, ElementSelectors.byNameAndText);   

    ElementSelector esNS = ElementSelectors.conditionalBuilder()
            .whenElementIsNamed(bookQName)
            .thenUse(bookNameDescSelector)
            .elseUse(ElementSelectors.byName)
            .build();   

Любые рекомендации, пожалуйста

...