DOMResult result = new DOMResult();
try {
validator.validate(source, result);
Document augmented = (Document) result.getNode();
// do whatever you need to do with the augmented document...
}
catch (SAXException ex) {
System.out.println(args[0] + " is not valid because ");
System.out.println(ex.getMessage());
}
}
}
這個(gè)過程的輸入和輸出都有一定的限制。不能用于所有的流輸入和輸出。SAX 源可以擴(kuò)展成 SAX 結(jié)果,DOM 源擴(kuò)展成 DOM 結(jié)果,但是 SAX 源不能擴(kuò)展成 DOM 結(jié)果,反之亦然。如果需要這么做,首先擴(kuò)展成匹配的結(jié)果:SAX 對(duì) SAX、 DOM 對(duì) DOM,然后使用 TrAX 的恒等轉(zhuǎn)換改變模型。
但不建議使用這種技術(shù)。將文檔需要的全部信息放在一個(gè)實(shí)例中,要比分解成實(shí)例和模式更可靠。您可以驗(yàn)證,但并非所有的人都能驗(yàn)證。
類型信息
W3C XML Schema Language 在很大程度上依賴于類型 這一概念。元素和屬性被聲明為 int、double、date、duration、person、PhoneNumber 或其他您能夠想到的類型。Java Validation API 提供了一種手段來報(bào)告這些類型,雖然令人吃驚的是該特性獨(dú)立于包的其他部分。
類型用 org.w3c.dom.TypeInfo 對(duì)象表示。這個(gè)簡單的接口通過 清單 5 來說明,它給出了類型的本地名和名稱空間 URI。還可以告訴您它是否派生自其他類型。除此以外,理解這種類型就是您的程序的任務(wù)了。Java 語言沒有說明它的含義,或者將其轉(zhuǎn)化成 double 和 java.util.Date 這樣的 Java 類型。
清單 5. DOM TypeInfo 接口
package org.w3c.dom;
public interface TypeInfo {
public static final int DERIVATION_RESTRICTION;
public static final int DERIVATION_EXTENSION;
public static final int DERIVATION_UNION;
public String getTypeName();
public String getTypeNamespace()
public boolean isDerivedFrom(String namespace, String name, int derivationMethod);
}
要獲得 TypeInfo 對(duì)象,需要向 Schema 對(duì)象請(qǐng)求 ValidatorHandler 而不是 Validator。ValidatorHandler 實(shí)現(xiàn)了 SAX 的 ContentHandler 接口。然后將該處理程序安裝到 SAX 解析器中。
還要在 ValidatorHandler(不是解析器)中安裝您自己的 ContentHandler,ValidatorHandler 將把擴(kuò)展的事件轉(zhuǎn)發(fā)到您的 ContentHandler。
相關(guān)推薦:計(jì)算機(jī)等級(jí)考試二級(jí)Java經(jīng)典算法大全匯總
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |