다음은 여러 XML 파일을 병합하려는 코드입니다. 이 코드에 의해 생성 된 파일을 구문 분석하려고 할 때XML 파일을 병합하는 중 오류가 발생했습니다.
public static void mergeXml(String directory) throws Exception {
File dir = new File(directory);
File[] rootFiles = dir.listFiles();
XMLEventWriter eventWriter;
XMLEventFactory eventFactory;
XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
eventWriter = outputFactory.createXMLEventWriter(new FileOutputStream("temp/testMerge1.xml"));
eventFactory = XMLEventFactory.newInstance();
// Create and write Start Tag
StartDocument startDocument = eventFactory.createStartDocument("ISO-8859-1");
eventWriter.add(startDocument);
for(File rootFile : rootFiles){
XMLEventReader test = inputFactory.createXMLEventReader(new StreamSource(rootFile));
while(test.hasNext()){
XMLEvent event= test.nextEvent();
//avoiding start(<?xml version="1.0"?>) and end of the documents;
if (event.getEventType()!= XMLEvent.START_DOCUMENT && event.getEventType() != XMLEvent.END_DOCUMENT)
eventWriter.add(event);
test.close();
}
eventWriter.add(eventFactory.createEndDocument());
eventWriter.close();
}
}
오전 얻는 두 가지 문제
- 출력 파일은 다음과 같은 예외
를 얻고있는 인코딩
[Fatal Error] :1:2493: The markup in the document following the root element must be well-formed.
org.xml.sax.SAXParseException: The markup in the document following the root element must be well-formed.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at SplitMain.validateInputFile(SplitMain.java:139)
at SplitMain.main(SplitMain.java:76)
파일 인코딩이 잘못 검출되면 조작 된 xml 오류가 발생할 수도 있습니다. 특히 비 라틴 문자가 포함 된 경우. – svz