XML文档验证在修改后的文档上失败,但在重新分析时通过

时间:2013-07-29 17:19:12

标签: java xml validation schema

我的代码通过向现有Document添加Attribute来修改XML Element。在修改之前,我使用DocumentSchema运行Validator验证并通过验证。

但是,在我添加Attribute(根据架构有效)后,如果我将Document实例传递给Validator则失败。

如果作为中间步骤,我会使用Document实例,将其转换为String并重新解析为Document,此新Document会通过验证。

我认为我不应该这样做。我尝试使用normalizeDocumentnormalize,但这些都没有解决问题。

更新

我写了一个单元测试,除了验证Document,添加属性并重新验证Document之外什么都不做。这过去了。但是,当我运行通过整个系统传递Document的集成测试时,它会失败。同样,转换为String并返回Document会通过验证。

代码不在我可以将其粘贴到此处的位置,并且由于单元测试通过,它似乎是一个更广泛的问题。

任何有关调查地点的建议都会有所帮助。

1 个答案:

答案 0 :(得分:2)

我遇到了名称空间感知XML Document的问题。

我使用setAttribute(name, value)添加非命名空间属性,结果相同 元素“y”异常中不允许使用属性“x”。重新解析文档,问题就消失了。

修复方法是使用名称空间感知方法setAttributeNS(namespaceURI, qualifiedName, value),将null作为namespaceURI传递。