Java 根据DTD编写XML
我想知道在Java中是否有一种方法(特别是API)能够以类似SAX的方式(即类似事件的方式,不同于JDOM,我不能使用JDOM)编写XML,它接受DTD并保证正确编写XML文档Java 根据DTD编写XML,java,xml,dtd,Java,Xml,Dtd,我想知道在Java中是否有一种方法(特别是API)能够以类似SAX的方式(即类似事件的方式,不同于JDOM,我不能使用JDOM)编写XML,它接受DTD并保证正确编写XML文档 我一直在使用SAX进行解析,我自己编写了一个XML编写器层,就像编写一个普通文件一样(通过OutputStreamWriter),但我发现我的XML编写器层并不总是遵循DTD规则。标准DocumentBuilder方法可以为您验证 这个片段取自 标准DocumentBuilder方法可以为您进行验证 这个片段取自 SAX
我一直在使用SAX进行解析,我自己编写了一个XML编写器层,就像编写一个普通文件一样(通过
OutputStreamWriter
),但我发现我的XML编写器层并不总是遵循DTD规则。标准DocumentBuilder方法可以为您验证
这个片段取自
标准DocumentBuilder方法可以为您进行验证 这个片段取自
SAX不知道如何编写XML文档。它被用来解析它们。所以,您可以选择要创建文档的任何方法,然后使用SAXAPI对DTD进行验证
顺便说一句,我可以问你为什么要限制自己使用10年前几乎过时的工具?为什么不使用更高级别的API将对象转换为XML,反之亦然?例如JAXB SAX不知道如何编写XML文档。它被用来解析它们。所以,您可以选择要创建文档的任何方法,然后使用SAXAPI对DTD进行验证
顺便说一句,我可以问你为什么要限制自己使用10年前几乎过时的工具?为什么不使用更高级别的API将对象转换为XML,反之亦然?例如JAXB 谢谢你的回答!你把事情说得更清楚了。我使用SAX是因为我们的软件应该读取XML并保持较小的内存占用。由于我不习惯XML操作,我的开发团队建议使用JDOM(“大”内存占用)和SAX,我坚持使用它们。正如您所建议的,我将阅读一些关于JAXB和其他较新API的内容。再次谢谢你!谢谢你的回答!你把事情说得更清楚了。我使用SAX是因为我们的软件应该读取XML并保持较小的内存占用。由于我不习惯XML操作,我的开发团队建议使用JDOM(“大”内存占用)和SAX,我坚持使用它们。正如您所建议的,我将阅读一些关于JAXB和其他较新API的内容。再次谢谢你!
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"));