에 파괴되고 해당하지 '&', 하나 내 내 XML 요소는 신비 반
임은 실제 XML을 구문 분석 않는 SAXParser를 객체를 사용.
이 작업은 일반적으로 URL을 XMLReader.Parse 메서드에 전달하여 수행됩니다. XML이 웹 서비스에 대한 POST 요청에서오고 있기 때문에 그 결과를 String으로 저장하고 StringReader/InputSource를 사용하여이 문자열을 XMLReader.Parse 메서드에 다시 공급합니다.
그러나 XMLstring의 2001 번째 문자에서 이상한 일이 일어나고 있습니다.
문서 처리기의 '문자'메서드는 startElement와 endElement 메서드 사이에서 TWICE로 호출되므로 효과적으로 내 문자열 (이 경우 프로젝트 제목)을 두 조각으로 나눕니다. 내 문자 방식으로 객체를 인스턴스화하기 때문에 하나 대신 두 개의 객체가 생성됩니다.
이 줄 "낮은"와 "레벨"사이에 파괴 문자열 화재 '문자'두 번에 약 2000 문자,
<title>SUMC-BOOKSTORE, LOWER LEVEL RENOVATIONS</title>
나는 StringReader를/InputSource의 해결 방법을 무시하고 플랫 XML 파일을 공급하는 경우 XMLReader.Parse하려면, 그것은 절대적으로 잘 작동합니다.
StringReader 및/또는 InputSource에 관한 문제로 인해이 문제가 발생합니다.
다음은 XML 문자열과 구문 분석에 사용되는 메서드이며 SAXParser를 사용합니다.
public void parseXML(String XMLstring) {
try {
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
xr.setContentHandler(this);
// Something is happening in the StringReader or InputSource
// That cuts the XML element in half at the 2001 character mark.
StringReader sr = new StringReader(XMLstring);
InputSource is = new InputSource(sr);
xr.parse(is);
} catch (IOException e) {
Log.e("CMS1", e.toString());
} catch (SAXException e) {
Log.e("CMS2", e.toString());
} catch (ParserConfigurationException e) {
Log.e("CMS3", e.toString());
}
}
XML 문자열에서이 시점에 이르면 '문자'가 두 번 나오지 않는 방법에 대한 아이디어를 매우 높이 평가합니다.
또는 POST 요청을 사용하는 방법을 보여주고 URL을 구문 분석 함수에 전달하십시오.
감사합니다.
+1. 예, 일반적인 처리 방법은 startElement 메소드에서 일종의 누산기를 작성하거나 첨부 한 다음 문자 메소드로 축적 한 다음 endElement 메소드에서 사용하고 폐기하거나 분리하는 것입니다. –