2011-11-21 55 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"));