Написание XML в соответствии с DTD - PullRequest
1 голос
/ 21 ноября 2011

Я хотел бы знать, есть ли способ (в частности, API ) в Java для записи XML SAX-подобным способом (т. Е. Событийным способом, отличным от JDOM (который я не могу использовать), который принимает DTD и гарантирует, что мой документ XML пишется правильно.

Я использую SAX для разбора, и я сам написал слой XML-писателя , как если бы я писал простой файл (через OutputStreamWriter), но я видел, что мой Уровень записи XML не всегда следует правилам DTD.

Ответы [ 2 ]

1 голос
/ 21 ноября 2011

SAX не знает, как писать документы XML.Это посещают, чтобы разобрать их.Таким образом, вы можете выбрать любой метод создания документа и затем проверить его, используя SAX API против DTD.

Кстати, могу я спросить вас, почему вы ограничиваете себя в использовании инструментов, которые почти устарели около 10 лет назад?Почему бы не использовать API более высокого уровня, который преобразует объекты в XML и наоборот?Например JAXB.

0 голосов
/ 21 ноября 2011

Стандартная методология 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"));
...