无法使用XMLUnit注册名称空间

时间:2016-01-13 15:21:00

标签: java xmlunit xmlunit-2

在使用xmlunit-2比较XML时,我似乎无法弄清楚如何设置命名空间

试过像:

   @Test
    public void testDiff_withIgnoreWhitespaces_shouldSucceed() {
        // prepare testData
        String controlXml = "<a><text:b>Test Value</text:b></a>";
        String testXml = "<a>\n <text:b>\n  Test Value\n </text:b>\n</a>";
        Map<String, String> namespaces = new HashMap<String, String>();
        namespaces.put("text","urn:oasis:names:tc:opendocument:xmlns:text:1.0");
        // run test
        Diff myDiff = DiffBuilder.compare(Input.fromString(controlXml).build())
                      .withTest(Input.fromString(testXml).build())
                      .withNamespaceContext(namespaces)
                      .ignoreWhitespace()
                      .build();

        // validate result
        Assert.assertFalse("XML similar " + myDiff.toString(), myDiff.hasDifferences());

    }

但总是得到

  

org.xmlunit.XMLUnitException:元素“text:b”的前缀“text”   不受约束。

从元素中删除命名空间前缀使其工作,但我想了解如何使用DiffBuilder正确注册命名空间。

我遇到同样的问题/忽略xmlunit-1.x使用该库的提示我也会很感激。

编辑,基于答案

通过将namespace属性添加到根节点,我设法绑定了命名空间

<a xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0">

感谢Stefan

1 个答案:

答案 0 :(得分:1)

NamespaceContext仅用于与比较“目标”相关联的XPath。它不打算用于为您比较的XML文档提供映射。

在XMLUnit中,无法将XML名称空间绑定到文档本身之外的前缀。这意味着您必须使用xmlns属性或根本不使用前缀。

相关问题