2012-03-27 88 views
0

我有一個Java程序,我必須根據XSD模式驗證XML消息。到現在爲止還挺好。但是現在我得到了一個新的要求,其中驗證的一部分基於XML消息的內容而不同。基於XML內容的XSD驗證

因此,基於一個場(1)的某些字段是的nillable與否和一些枚舉是不同的值。但是,我無法在驗證之前解析文檔...所以我應該如何處理這個問題?

1)有2個不同的XSD文件,處理XML文本(=醜陋的),並提取一個字段來決定XSD應該用什麼?

2)有3個不同的XSD文件。 2個不同的選項和1個聯盟,我們可以通過匹配2個選項的方式進行驗證?我們可以正確地解析XML,提取字段並決定使用哪個更具體的XSD進行額外驗證?

3)其他選項?

+0

你是什麼意思,你'不能在驗證之前解析文檔'? – maximdim 2012-03-30 14:56:43

+0

那麼如果文檔沒有被驗證,它可能是非常無效的XML,因此解析會產生一個異常。 – hcpl 2012-04-02 09:50:27

回答

1

不要使用JAXB解析它,而是使用SAX/StAX類型解析器(或者,如果您真的想要使用DOM,儘管SAX會更快,如果您只需要少量元素)來定位和分析元素,您需要爲了確定需要使用的正確模式。一旦您收集了足夠的信息,請使用適當的模式驗證來中止解析並再次解析。

+0

馬克西姆,謝謝。我不知道我可以使用SAX解析它,而無需首先驗證。這解決了我的問題。 – hcpl 2012-05-31 08:43:25

0

您是否正在編寫自己的java驗證?我會建議使用開源或付費驗證:XML Schema (XSD) validation tool?工具。

另外根據你所描述的,它聽起來像你的模式不再向後兼容,因爲你不得不使用基於某些元素的兩個不同的模式,我會建議回覆到需求並查看模式是否可以更改和更新以保持向後兼容性。這將允許繼續使用1 Schema作爲你的xml文件。