验证和修复 xml

本文关键字:xml 验证 | 更新日期: 2023-09-27 17:47:22

有没有办法获取更多关于验证错误的有用信息?XmlSchemaException提供了错误的行号和位置,这对我来说毫无意义。毕竟,XML 文档与其瞬态文本表示无关。我想得到一个枚举错误(或错误代码),指定错误时的内容,节点名称(或 xpath)以定位问题的根源,以便我可以尝试修复它。

编辑:我说的是有效的xml文档 - 只是对特定架构无效!

验证和修复 xml

根据我的经验,您很幸运能够获得行号并解析位置。

您可以考虑通过 DTD 进行验证,这有时会产生更有趣的错误,但是,在我当前从事的项目中,我们使用 XSLT 进行验证。转换检查语法并将错误报告为输出的转换文本。如果您想要更友好的错误检查,我会考虑该路线。对我们来说,空输出意味着没有错误,否则我们会从 XSLT 处理中获得一些关于错误是什么以及在哪里的很好的细节。

您可以通过设置一个 XmlReader 来实现此目的,该 XmlReader 的 XmlReaderSettings 包含架构,然后使用它逐个节点读取输入流。 您可以跟踪上次读取的节点,并在发生验证错误时很好地了解您在文档中的位置。

我认为,如果您尝试此练习,您会发现存在许多验证错误(例如缺少必需元素),其中错误节点的概念没有多大意义。 是的,在这种情况下,父元素显然是错误的,但真正触发错误的是读者遇到结束标签而从未看到所需的元素,这就是为什么错误线和位置指向结束标签的原因。

我个人不确定如何获得更详细的错误,通常如果您打开文档并转到提到的位置,您可以轻松找到错误。

如果代码无法将文件解析为有效的 XML,则很难提供 XPATH 或其他命名的 XML 详细信息。

这似乎不是一件容易的事。罗伯特·罗斯尼的回答最接近于以编程方式解决我的问题,所以我现在接受这一点。我将继续使用 xsl 解决方案。任何找到解决验证错误的更好方法的人都可以响应此线程。