gpt4 book ai didi

java - 无法向 XMLUnit 注册命名空间

转载 作者:行者123 更新时间:2023-12-02 04:02:19 24 4
gpt4 key购买 nike

使用 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: The prefix "text" for element "text:b" is not bound.

从元素中剥离 namespace 前缀使其可以工作,但我想了解如何使用 DiffBuilder 正确注册 namespace 。

我在 xmlunit-1.x 上遇到了同样的问题/无知所以我也很感激使用该库的提示。

根据答案进行编辑

通过将命名空间属性添加到根节点,我成功地绑定(bind)了命名空间

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

谢谢斯特凡

最佳答案

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

无法将 XML namespace 绑定(bind)到 XMLUnit 中文档本身之外的前缀。这意味着您要么必须使用 xmlns 属性,要么根本不使用前缀。

关于java - 无法向 XMLUnit 注册命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34770388/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com