2008-09-30 101 views
2

當我想在我的服務器端Java中針對模式驗證我的XML文檔時,我使用內置的JRE Xerces實現和javax.xml.validation.Schema。它工作正常,但在驗證失敗時,Xerces的給出了非常接近無用的錯誤信息,例如:你用什麼來驗證XML模式?

cvc-minLength-valid: Value '' with length = '0' is not facet-valid with respect to minLength '1' for type 'PopulatedStringType' 

這些可以採取年齡診斷和追查到XML文檔的特定部分失敗驗證,所有這些都是因爲糟糕的錯誤消息。

所以我的問題是,你是否使用了另一種方法來驗證Schema的XML,從而在驗證失敗時提供更有用的輸出?

請不要說這是服務器端的Java,所以請不要說「使用XML Spy」或類似的東西。

+1

對我來說聽起來相當明顯的錯誤信息:它表示在您的XML架構中指定的'PopulatedStringType'有一個被XML實例侵犯的minLength方面? – toolkit 2008-09-30 16:44:19

+0

+1 @toolkit 您可能需要考慮花費一些時間來理解Xerces錯誤消息。我懷疑另一個驗證者會更清楚。 – ykaganovich 2008-09-30 17:54:18

回答

0

我們使用Oracle's XDK (XML Development Kit),其中包含帶驗證解析器和XSLT 2.0的xmlparserv2.jar。它使用JAXB API,因此您只需將其添加到類路徑中並更改導入即可。它會拋出不完美的錯誤,但我會比你的例子更容易理解。

0

xmlstarlet(xmlstar.sourceforge.net/)是一個命令行工具包。您可以使用Runtime.exec()爲給定的xml運行它(只要xml位於文件中)。

0

我們使用Castor

Castor是Java [tm]的開源數據綁定框架。這是Java對象,XML文檔和關係表之間的最短路徑。 Castor提供Java-to-XML綁定,Java-to-SQL持久性等等。

0

如果您在解析Xerces錯誤時遇到問題,並且希望能夠突出顯示文檔中哪些位置違反了規則,請查看一些XML創作工具,如oXygen

alt text http://www.oxygenxml.com/img/errorsOverviewRuler.gif

一旦你與你的實例XML文檔的架構關聯的編輯器將突出顯示文檔的違規區,爲您提供違規行爲的描述。

另外,你可以使用不同的引擎來執行驗證:

氧還內置了支持: 的Xerces,libxml的,XSV,撒克遜SA, MSXML4.0,MSXML .NET和SQC 。