그래서 StAX를 사용하는 일련의 XML 문서에서 일부 데이터 정리를 수행하고 있습니다. 필자는 본질적으로 문서를 읽고 몇 개의 태그가 누락 된 정확한 문서를 작성하려고합니다. 내가 가지고있는 문제는 유효한 XML을 출력하지 않는다는 것입니다.StAX를 사용하여 하나의 XML 문서에서 DTD를 읽고 다른 문서에 쓰기
내 출력은 왼쪽에 표시하고 원본 문서는 오른쪽 [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가 아니라면 어떻게이 지옥을 얻을 수 있습니까?
도움 주셔서 감사합니다.