2

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

编辑:我说的是有效的 xml 文档——只是对特定的模式无效!

4

5 回答 5

2

以我的经验,你很幸运能得到一个行号和解析位置。

于 2008-09-30T20:47:10.790 回答
1

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

于 2008-09-30T20:50:52.607 回答
0

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

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

于 2008-09-30T20:28:29.243 回答
0

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

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

于 2008-10-01T00:11:59.893 回答
0

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

于 2008-10-01T10:01:54.827 回答