2008-09-30 100 views
2

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

编辑:我在谈论有效的XML文件 - 只是无效的特定架构!

回答

0

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

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

0

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

如果代码无法将文件解析为有效的XML,那么它很难给出XPATH或其他命名的XML细节。

2

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

1

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

+0

谢谢!你在谈论类似于schematron的东西。我目前正在做同样的事情,但它不能帮助我尝试在运行时修复有问题的xml文档。 – Goran 2008-09-30 20:58:44

+0

如果您编写自己的XSLT,您将有更好的修复运气。我们的XSLT有两个方面:一个用于语法,另一个用于验证(我们的XML就像是脚本)。这两个部分都提供了有意义的信息,可以用于某些部分重建破碎的信息。 – 2008-09-30 21:26:47

0

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