栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

比较两个XML字符串,忽略元素顺序

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

比较两个XML字符串,忽略元素顺序

我原来的答案已经过时了。如果必须再次构建它,我将使用xmlunit 2和xmlunit-
matchers。请注意,对于xml单元,不同的顺序始终是“相似”而不是相等。

@Testpublic void testXmlUnit() {    String myControlXML = "<test><elem>a</elem><elem>b</elem></test>";    String expected = "<test><elem>b</elem><elem>a</elem></test>";    assertThat(myControlXML, isSimilarTo(expected) .withNodeMatcher(new DefaultNodeMatcher(ElementSelectors.byNameAndText)));    //In case you wan't to ignore whitespaces add ignoreWhitespace().normalizeWhitespace()    assertThat(myControlXML, isSimilarTo(expected)        .ignoreWhitespace()        .normalizeWhitespace()        .withNodeMatcher(new DefaultNodeMatcher(ElementSelectors.byNameAndText)));}

如果有人仍然不想使用纯Java实现,那就是。此实现从xml中提取内容,并比较列表的忽略顺序。

public static document loadXMLFromString(String xml) throws Exception {    documentBuilderFactory factory = documentBuilderFactory.newInstance();    documentBuilder builder = factory.newdocumentBuilder();    InputSource is = new InputSource(new StringReader(xml));    return builder.parse(is);}@Testpublic void test() throws Exception {    document doc = loadXMLFromString("<test>n" + "  <elem>b</elem>n" + "  <elem>a</elem>n" + "</test>");    XPathFactory xPathfactory = XPathFactory.newInstance();    XPath xpath = xPathfactory.newXPath();    XPathexpression expr = xpath.compile("//test//elem");    NodeList all = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);    List<String> values = new ArrayList<>();    if (all != null && all.getLength() > 0) {        for (int i = 0; i < all.getLength(); i++) { values.add(all.item(i).getTextContent());        }    }    Set<String> expected = new HashSet<>(Arrays.asList("a", "b"));    assertThat("List equality without order", values, containsInAnyOrder(expected.toArray()));}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/569939.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号