我想知道在Java中是否有一种方法(特别是 API )以类似SAX的方式编写XML(即类似事件的方式,不同于我不能使用的JDOM,它采用DTD并保证正确编写我的XML文档。
我一直在使用SAX进行解析,我自己编写了 XML编写层,好像我正在写一个普通文件(通过OutputStreamWriter
),但我看到了我的 XML编写器层并不总是遵循DTD规则。
答案 0 :(得分:1)
SAX不知道编写XML文档。它被用来解析它们。因此,您可以选择要创建文档的任何方法,然后使用针对DTD的SAX API对其进行验证。
BTW我可以问你为什么要限制使用大约10年前几乎过时的工具?为什么不使用更高级别的API将对象转换为XML,反之亦然?例如JAXB。答案 1 :(得分:0)
标准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"));