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

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

有帮助吗?

解决方案

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

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

其他提示

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

您可能会考虑通过DTD进行验证,而有时会提供稍微有趣的错误,但是,对于我目前正在处理的项目,我们使用XSLT进行验证。转换检查语法并将错误报告为输出的转换文本。如果你想要更友好的错误检查,我会考虑这条路线。对我们来说,空输出意味着没有错误,否则我们会从XSLT处理中得到一些关于错误和位置的详细信息。

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top