2012-07-09 2 views
1

SAXBuilder를 사용하여 XML 파일을 JDOM 문서 인스턴스로 구문 분석하는 데 문제가 있습니다.JDOM - SaxBuilder - 내용이 프롤로그에서 허용되지 않습니다.

그것은 다음과 같은 예외가 발생합니다 :

[Fatal Error] :1:1: Content is not allowed in prolog. 

나는 발견하고 스택 거래소에 인터넷에서 다른 장소에있는 모든 스레드를 읽고 오류를 디버깅하기 위해 다양한 일을 시도했습니다.

다음 코드 스 니펫으로 마무리됩니다.

String template = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<server></server>"; 
InputStream in = new StringBufferInputStream(template); 
return saxBuilder.build(in); 

무엇이 잘못 되었나요?


나는 그것을 인정하는 부끄러워하지만 오류가 내가 사용하여 다른 하나에 대해 구문 분석 된 XML을 비교 한 내가 나중에 여기가 아니라 보여 주었다 스 니펫에 의해 생성되지 않았 음을 밝혀졌다 XMLUnit 라이브러리.

오류가 제시된 줄에 있다고 생각하게 만드는 것은 오류 메시지의 내용입니다.

이 질문이 어떤 가치도 의미하지 않기 때문에이 질문을 닫고 (가능하면 삭제하는 것이) 적절하다고 생각합니다.

+0

에 정말 문자열이 있는가 또는 파일에서 TEXTFILE/XML 문서를 읽습니까, 그래서

 StringReader sr = new StringReader(template); Document document = saxReader.read(sr); 

입니까? 내 경험에 의하면 파일이 어떤 이유로 null을 반환하고 실제로 데이터를 작성하지 않으면이 오류가 발생할 수 있습니다. – Scorpio

답변

1

이 오류는 일반적으로 XML 선언 앞에 텍스트가 있음을 의미합니다.

스 니펫에서 xml이 정상적으로 보입니다. 문제는 귀하의 문서에 없을 수도 있습니다. 스키마 또는 다른 참조 된 XML 파일이있는 경우 오류는 사실 그 중 하나를 참조 할 수 있습니다.

0

다른 곳에서 문제가 발생한 것으로 생각됩니다. (dom4j를 사용하여) 다음 코드는 나를 위해 작동 :

public static void main(String[] args) throws DocumentException { 
    String template = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<server></server>"; 
    SAXReader saxReader = new SAXReader(); 
    InputStream is = new StringBufferInputStream(template); 
    Document document = saxReader.read(is); 
    System.out.println(document.asXML()); 
} 

참고 또한 StringBufferInputStream이되지 않습니다. 또 다른 문제는 XML 조각에없는, 그러나 아마 saxBuilder.build(...)

+0

String을 XML로 구문 분석하기 위해 문자열을 바이트로 변환하지 마십시오. StringReader를 사용하십시오. – jtahlborn

+0

당신이 맞아요 : 대답을 편집했습니다. – MarcoS

관련 문제