2011-11-21 54 views
1

我想知道在Java中是否有一種方法(特別是,一個API)以類似於SAX的方式編寫XML(即,類似事件的方式,不同從JDOM,我不能使用),需要一個DTD,並保證我的XML文檔被正確書寫。根據DTD編寫XML

我已經用瞭解析SAX和我有我自己寫的一個XML作家層彷彿我正在編寫一個純文本文件(通過OutputStreamWriter),但我已經看到了我的XML作家層並不總是遵循DTD規則。

回答

1

SAX採取

這段代碼不知道寫XML文檔。有人會解析它們。因此,您可以選擇任何想要創建文檔的方法,然後使用SAX API對DTD進行驗證。

順便提一下,我可能會問你爲什麼限制自己使用幾乎在10年前已經過時的工具?爲什麼不使用將對象轉換爲XML的高級API,反之亦然?例如JAXB。

+0

謝謝你的回答!你已經說得更清楚了。 我正在使用SAX,因爲我們的軟件應該讀取XML並保留少量內存。由於我不習慣於XML操作,因此我的開發團隊建議使用JDOM(用於我們的目的的「大」內存佔用)和SAX,我堅持使用它。 我會按照您的建議閱讀關於JAXB和其他更新的API的內容。再次感謝你! – Guiraldelli

0

Standard DocumentBuilder方法可以爲您進行驗證。從http://www.edankert.com/validate.html#Validate_using_internal_DTD

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
factory.setValidating(true); 
factory.setNamespaceAware(true); 

SchemaFactory schemaFactory = 
    SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema"); 

factory.setSchema(schemaFactory.newSchema(
    new Source[] {new StreamSource("contacts.xsd")})); 

DocumentBuilder builder = factory.newDocumentBuilder(); 

builder.setErrorHandler(new SimpleErrorHandler()); 

Document document = builder.parse(new InputSource("document.xml"));