根据DTD编写XML

时间:2011-11-21 18:57:49

标签: java xml dtd

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

我一直在使用SAX进行解析,我自己编写了 XML编写层,好像我正在写一个普通文件(通过OutputStreamWriter),但我看到了我的 XML编写器层并不总是遵循DTD规则。

2 个答案:

答案 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"));