簡體   English   中英

針對多個XSD驗證XML文件,並知道哪個驗證該文件(jdom2)

[英]Validate XML file against several XSD and know which one validates the file (jdom2)

我想針對兩個不同的XSD驗證XML文件,因為不必針對兩個文件都驗證XML文件,而僅針對其中一個驗證。 然后,我需要知道哪個XSD文件驗證XML文件以便訪問不同的元素。

XSD文件具有以下類型: sdfcsdf,但是我有自己的版本,因此我不使用XML標頭中的模式(並且我不想要求用戶對此進行修改)。

問題:如何輕松地進行驗證測試,然后使用單個xml庫(如果可能的話是jdom2)解析XML文件(根據正確的模式)?

目前,我使用javax進行驗證,使用jdom2訪問元素,但我認為/希望可以使用一個庫來做同樣的事情,至少是為了不一次又一次地解析文件。 而且,正如一個微笑的問題所指出的那樣,為了理解javax的工作原理,我寧願不吸毒。

使用JDOM 2,您可以設置兩個不同的XML讀取器-每個模式一個。

然后,您可以使用SAXParser並通過閱讀器來閱讀文檔,無論哪種方案都正確。

考慮類似( XMLReaderXSDFactory

sdfreader = new XMLReaderXSDFactory("http://www.es.ele.tue.nl/sdf3/xsd/sdf3-sdf.xsd");
csdfreader = new XMLReaderXSDFactory("http://www.es.ele.tue.nl/sdf3/xsd/sdf3-csdf.xsd");

然后,使用這些閱讀器工廠,您可以使用其他構造函數設置SAXBuilder:

SAXBuilder sdfbuilder = new SAXBuilder(sdfreader);
SAXBuilder csdfbuilder = new SAXBuilder(csdfreader);

現在,您可以通過任何一個構建文檔。 無論“成功”構建文檔的哪一個都具有正確的模式。

try {
    Document doc = sdfbuilder.build(somexml);
    System.out.println("Parsed using sdf")
    return doc
} catch (JDOMException x) {
    // parse failed, probably wrong schema....
}

try {
    Document doc = csdfbuilder.build(somexml);
    System.out.println("Parsed using csdf")
    return doc
} catch (JDOMException x) {
    // parse failed, probably wrong schema....
}

// oops, nothing works for this document...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM