[英]How to use SAXParseException effectively in Java
我正在验证Java中的XMLSchema,并且当我有无效的内容模型时会抛出SAXParseExceptions。
我将使用这些异常来突出验证失败的位置 - 但SAXParseExceptions似乎有点过低。
例如,对于枚举失败,我得到的有效性错误是所提供的值与一个例外中的内容模型不匹配,以及它在下一个例子中应用的元素。
我想我需要一个实用程序,它抽象一点将相关的错误合并在一起,并将异常文本解析为可用的异常属性。
这是一种合理的方法,还是我只是缺少某些东西,或者是图书馆或助手班?
更新@timgilbert,感谢您的回复。
例如,我在t'internet上找到了一个SAXParseException
cvc-pattern-valid: Value 'en' is not facet-valid
with respect to pattern '([a-zA-Z]{1,8})(-[a-zA-Z0-9]{1,8})*'
对我来说关键的事情是
我希望能够做的一个例子就是让人们提交一份文件,并通过用户友好的消息突出显示验证失败的文件 - 上面的错误信息似乎不太友好......必须解析单引号就像是一场等待发生的事故:)
我想我可能做错了“引用元素”的事情,也许我应该默认将文档的身份转换作为验证的一部分,并使用验证错误属性来扩充转换可以用CSS挑选出来。 如果我需要解析消息以使它们更友好,那仍然无济于事......
Re:紧密绑定,javax.xml.validation.Validator.validate()抛出org.xml.sax.SAXException无论如何 - 不知道如何摆脱假设绑定...
干杯
Brabster我也面临类似的问题,我需要告诉xml中哪个元素出错。 我通过在SAX Parser的处理程序中维护堆栈来解决了这个问题。 在startElement方法中,我在堆栈中推送qName(元素的名称),在endElement方法中,我从堆栈中弹出qName。
每当异常出现时,我的堆栈代表元素的完整XPath。
唯一的问题是如果有多个具有相同名称的元素,那么您不知道错误是针对哪个元素。 但至少完整的XPath细节与LineNumber和ColumnNumber一起提供了帮助。
希望这可以帮助。
我不完全清楚你在这里问的是什么,也许你可以提供一些更详细的信息,说明你的意思是什么意思太低了? 是错误信息本身是不可理解的?
SaxParseException类具有getColumnNumber()和getLineNumber()方法,您可以将这些方法呈现给用户以使其能够修复错误。
您可能尝试的一件事是使用不同的XML解析实现 - 每个解析器在找到无效代码时都会抛出错误,但不同的实现可能会有不同的错误消息和异常链。
实际上,出于这个原因,我会怀疑尝试构建一个检查异常链的库,并试图从中构建一个更连贯的错误消息,因为你要将代码紧密地耦合到一个特定的细节。 XML解析实现(特别是如果您依赖于错误消息的特定措辞)。
(对不起,这不是更具体,也许您可以举例说明您遇到的问题?)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.