Так что я делаю очистку данных в серии XML-документов, используя StAX. Я хочу по существу прочитать в документе и выплюнуть тот же самый документ с отсутствием нескольких тегов. Проблема, с которой я сталкиваюсь, заключается в том, что я не выдаю допустимый XML.Используйте StAX для чтения DTD из одного документа XML и напишите другому
Вы можете увидеть мой вывод слева, а оригинальный документ справа [здесь] (http://imgur.com/a/oFxZd). Изображение внизу - это выход из xmllint -valid. Как вы можете видеть, в нем говорится, что DTD не найден, и что в конце документа есть дополнительный контент.
Мой код для реализации писателя это
public XMLEventWriter setUpWriter(File blah) throws FileNotFoundException, XMLStreamException {
newFileName = thef.getName().substring(0, thef.getName().indexOf("_") + 1);
try {
writer = outputFactory
.createXMLEventWriter(new FileOutputStream(newFileName + "mush.xml"), "UTF-8");
} catch (XMLStreamException ex) {
ex.printStackTrace();
System.out.println("There was an XML Stream Exception, whatever that means for writer");
}
//outputFactory.setProperty("escapeCharacters", false);
eventFactory = XMLEventFactory.newInstance();
StartDocument startDocument = eventFactory.createStartDocument();
writer.add(startDocument);
//writer.add("<!DOCTYPE DjVuXML>");
return writer;
}
Это мой код, который обрабатывает фактическую запись.
if (event.isStartElement()) { //first it looks for start elements
StartElement se = event.asStartElement();
if ("OBJECT".equals(se.getName().getLocalPart())) {
writer.add(se);
} else if ("MAP".equals(se.getName().getLocalPart())) {
writer.add(se);
} else if ("PARAM".equals(se.getName().getLocalPart())) {
writer.add(se);
} else if ("LINE".equals(se.getName().getLocalPart())) {
writer.add(se);
} else if ("DjVuXML".equals(se.getName().getLocalPart())) {
writer.add(se);
}else if ("WORD".equals(se.getName().getLocalPart())) {
word.text = reader.getElementText();
EndElement wordEnd = eventFactory.createEndElement("", "", "WORD");
writer.add(se);
Characters characters = eventFactory.createCharacters(word.text);
writer.add(characters);
writer.add(wordEnd);
}
}
} else if (event.isEndElement()) {
EndElement ee = event.asEndElement();
if ("MAP".equals(ee.getName().getLocalPart())) {
writer.add(ee);
} else if ("DjVuXML".equals(ee.getName().getLocalPart())) {
writer.add(ee);
} else if ("LINE".equals(ee.getName().getLocalPart())) {
writer.add(ee);
}
else if ("BODY".equals(ee.getName().getLocalPart())) {
writer.add(ee);
}
}
}
writer.flush();
writer.close();
Теперь, когда мы получили, что из пути мой вопрос имеет два аспекта:
1) Является ли мой выход не действителен, потому что ему не хватает DTD?
1a) если да, как включить DTD? Даже если нет, скажите мне, это меня беспокоило.
2) Если это не DTD, то как, черт возьми, я получу эту вещь.
Спасибо за помощь!