Я сравниваю 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();
Любые рекомендации, пожалуйста