XML 문서를 구문 분석하는 동안 예외가 발생합니다.java - SAXparserException : 내용이 프롤로그에서 허용되지 않습니다.
나는 here과 here과 같은 많은 게시물을 보았습니다. 하지만 여전히 내 문제가 해결되지 않았습니다. 나는 header.I에있는 어떤 공간도 가지고 있지 않다는 것을 검사했다 메모장으로 창조하고 나는 저장하고있는 동안 utf-8로 선택했다.
내 XML 파일은 내가 파일을로드하고 구문 분석을 자바를 사용하고이
<?xml version="1.0" encoding="UTF-8"?>
<poem>
<title>Roses are Red</title>
<l>Roses are red</l>
</poem>
것 같습니다. 내 자바 코드는
File xml = new File("d:\\uploads\test.xml");
try{
XMLReader xr = XMLReaderFactory.createXMLReader();
MySAXApp handler = new MySAXApp();
xr.setContentHandler(handler);
xr.setErrorHandler(handler);
FileReader r = new FileReader(xml);
xr.parse(new InputSource(r));
}
catch(Exception e)
{
log.info("Exception : "+e.getMessage());
}
내 MySAXApp 클래스는 다음이 당신의 연결의 첫 번째에 @MikeSokolov에 의해 설명
package utility;
import java.io.FileReader;
import java.util.logging.Logger;
import org.xml.sax.XMLReader;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.helpers.XMLReaderFactory;
import org.xml.sax.helpers.DefaultHandler;
public class MySAXApp extends DefaultHandler {
public Logger log;
public MySAXApp()
{
super();
log = Logger.getAnonymousLogger();
}
public void startDocument()
{
log.info("Start document");
}
public void endDocument()
{
log.info("End document");
}
public void startElement (String uri, String name,String qName, Attributes atts)
{
log.info("Start element: " + qName);
}
public void endElement (String uri, String name, String qName)
{
log.info("End element: " + qName);
}
public void characters (char ch[], int start, int length)
{
log.info("values: \"");
for (int i = start; i < start + length; i++) {
switch (ch[i]) {
case '\\':
log.info("\\\\");
break;
case '"':
log.info("\\\"");
break;
case '\n':
log.info("\\n");
break;
case '\r':
log.info("\\r");
break;
case '\t':
log.info("\\t");
break;
default:
log.info(ch[i]+"");
break;
}
}
log.info("\"\n");
}
}
스택 추적
org.xml.sax.SAXParseException: Content is not allowed in prolog.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1411)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:1038)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
at utility.PerformOperation.startIndexing(PerformOperation.java:91)
at utility.Upload.doPost(Upload.java:126)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
전체 스택 추적을 붙여 넣을 수 있습니까? catch 블록에서 e.printStackTrace()를 사용하십시오. –
@JoeElleson 게시물을 편집하고 스택 추적을 붙여 넣었습니다 – Shadow
가능한 복제본 [org.xml.sax.SAXParseException : 프롤로그에서 내용을 사용할 수 없습니다] (http://stackoverflow.com)/questions/5138696/org-xml-sax-saxparseexception-content-in-prolog에서 허용되지 않음) – Raedwald