[英]What is the best way to validate multiple XML files against a XSD?
我正在一個需要針對其XSD驗證許多XML文件的項目,我遇到的麻煩是,許多XSD文件都依賴於其他XSD ,這使得通常的驗證有點麻煩,是否有一種優雅的解決方法這個問題?
如果可能的話,我希望使用內存中的那些文件,這些文件的目錄結構不符合其導入路徑。
請注意,我正在使用Java語言。
假設您使用的是JAXP,則可以在SAXParserFactory
或DocumentBuilderFactory上setSchema()
。
我參與其中的一種解決方案是使用SchemaFactory.newSchema(Source[] schemas)
將所有XSD源讀取到聚合的Schema
對象中。 然后,該聚合的模式能夠驗證引用任何“頂部”模式的任何XML文檔。 所有imported
架構都必須是聚合架構的一部分。 我記得,有必要按依賴關系對Source數組進行排序,這樣,如果Schema A導入了Schema B,則Schema B必須在數組中的Schema A之前發生。
另外,正如我記得的那樣, <include>
在這種機制下不能很好地工作。
另一個解決方案是在ShemaFactory上設置LSResourceResolver
。 您將必須實現自己的LSResourceresolver
,它根據解析器的輸入來提供字節流或字符流。 我尚未親自使用或研究此解決方案。
第一個解決方案當然具有這樣的好處,即模式解析和處理可以一次完成,並可以重復用於隨后的所有驗證。 第二種選擇可能很難實現。
要記住的另一件事(取決於您的上下文):從性能和安全性角度來看,控制整個“解析”過程(即控制解析器如何訪問外部資源)是一個不錯的設計選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.