Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 根据DTD编写XML_Java_Xml_Dtd - Fatal编程技术网

Java 根据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

我想知道在Java中是否有一种方法(特别是API)能够以类似SAX的方式(即类似事件的方式,不同于JDOM,我不能使用JDOM)编写XML,它接受DTD并保证正确编写XML文档


我一直在使用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"));