因此,我正在使用StAX對一系列XML文檔進行一些數據清理。我想從本質上閱讀文檔,然後用幾個缺失的標籤吐出完全相同的文檔。我遇到的問題是我不輸出有效的XML。使用StAX從一個XML文檔讀取DTD並寫入另一個
您可以在左側看到我的輸出,並在右側看到原始文檔[here](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)if是如何包含DTD?即使沒有告訴我,這一直困擾着我
2)如果它不是DTD,那麼我怎麼得到這個東西有效。
感謝您的幫助!