我想知道在Java中是否有一种方法(特别是,一个API)以类似于SAX的方式编写XML(即,类似事件的方式,不同从JDOM,我不能使用),需要一个DTD,并保证我的XML文档被正确书写。根据DTD编写XML
我已经用了解析SAX和我有我自己写的一个XML作家层仿佛我正在编写一个纯文本文件(通过OutputStreamWriter
),但我已经看到了我的XML作家层并不总是遵循DTD规则。
我想知道在Java中是否有一种方法(特别是,一个API)以类似于SAX的方式编写XML(即,类似事件的方式,不同从JDOM,我不能使用),需要一个DTD,并保证我的XML文档被正确书写。根据DTD编写XML
我已经用了解析SAX和我有我自己写的一个XML作家层仿佛我正在编写一个纯文本文件(通过OutputStreamWriter
),但我已经看到了我的XML作家层并不总是遵循DTD规则。
SAX采取
这段代码不知道写XML文档。有人会解析它们。因此,您可以选择任何想要创建文档的方法,然后使用SAX API对DTD进行验证。
顺便提一下,我可能会问你为什么限制自己使用几乎在10年前已经过时的工具?为什么不使用将对象转换为XML的高级API,反之亦然?例如JAXB。
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"));
谢谢你的回答!你已经说得更清楚了。 我正在使用SAX,因为我们的软件应该读取XML并保留少量内存。由于我不习惯于XML操作,因此我的开发团队建议使用JDOM(用于我们的目的的“大”内存占用)和SAX,我坚持使用它。 我会按照您的建议阅读关于JAXB和其他更新的API的内容。再次感谢你! – Guiraldelli