2010-07-28 1 views
4

현재 SAXParserFactory와 함께 SAXParser를 사용하고 있으며 '&'기호에서 cuttoff 인 문자열에 문제가 있습니다. 예를 들면 : "우리의 세계를 창조 한 나라 & 모든 것이"그 안에있는 모든 것 "이됩니다.SAXParser '&'연결 문제

분명히, 나는 이것을 원하지 않습니다. xml 입력에서 문자는 적절하게 &으로 이스케이프됩니다. 이 문제를 어떻게 해결할 수 있습니까?

try{ 
      SAXParserFactory spf = SAXParserFactory.newInstance(); 
      SAXParser sp = spf.newSAXParser(); 

      /* Get the XMLReader of the SAXParser we created. */ 
      XMLReader r = sp.getXMLReader(); 

      //This handles the xml and populates the entries array 
      XMLHandler handler = new XMLHandler(); 


      // register event handlers 
      r.setContentHandler(handler); 
      String url = "http://foobar.xml"; 
      r.parse(url); 

      return handler.getEntries(); 
} 

나는 나의 클래스는 DefaultHandler 클래스

.... 
    public void characters(char ch[], int start, int length){ 
      String value = new String(ch , start , length); 

      if(!value.trim().equals("")) { 

       if(currentElement.equalsIgnoreCase("TITLE")) { 
        tempEntry.setTitle(value); 
       } 
.... 

답변

10

검출 된 SAX API는 주어진 텍스트 노드가 하나 개의 조각으로 제공되는 것은 아닙니다이 있습니다. characters() 메서드에 대한 여러 호출로 분리 할 수 ​​있습니다. 응용 프로그램은이를 수용해야하며 조각 자체를 재구성해야합니다.

덧붙여 말하자면 Nation Created Our World & everything in it은 유효한 XML 텍스트 조각이 아니며 Nation Created Our World & everything in it이어야합니다. 이 경우 SAX 파서는 Nation Created Our World, &everything in it으로 분할 될 수 있으며 앱은 마지막으로 한 번만 기억합니다.

+0

내 실수를 skaffman,하지만 XML 파일에 '거기에 우리의 세계 & 만물을 창조 국가'입니다. 나는 당신이 제안한 것을 시도 할 것입니다. –

+0

감사합니다. –

3

덕분에

구현,

public void startElement(String s, String s1, String elementName, Attributes attributes) throws SAXException { 
    // clear tmpValue on start of element 
    tmpValue = ""; 
} 

public void characters(char[] ac, int i, int j) throws SAXException { 
    tmpValue += new String(ac, i, j); 
}