2012-04-27 3 views
2

덮어 쓰기 된 SAX 콜백 메소드에서 내 stringbuffer를 업데이트 한 후 왜 비어 있는지 파악하는 데 도움이 필요합니다. 내 코드 : 다른 클래스에서SAX 콜백이 전역 문자열 버퍼를 업데이트하지 않음

public class SAXXMLParser extends DefaultHandler 
{ 
    SAXParserFactory factory; 
SAXXMLParser dh; 
SAXParser sax; 
StringBuffer accumulator; 
String remember = ""; 

public String saxParse(String msgToParse, String uriPathExpression) 
     throws SAXException, IOException, ParserConfigurationException 
{ 
    System.out.println("saxParse"); 

    factory = SAXParserFactory.newInstance(); 
    sax = factory.newSAXParser(); 
    dh = new SAXXMLParser(); 
    InputStream is = new ByteArrayInputStream(msgToParse.getBytes()); 
    sax.parse(is , dh); 

    System.err.println(remember); 
    return remember; 
} 

public void startElement(String uri, String localName, String elementName,   Attributes attrs) 
{ 
    accumulator.setLength(0); 
} 

public void endElement(String uri, String name, String qName) 
{ 
    System.out.println(qName); 
    if(qName.equalsIgnoreCase("my element")) 
    { 
     remember = accumulator.toString(); 
    } 
} 

public void characters(char[] ch, int start, int len) 
{ 
    accumulator.append(ch, start, len); 
} 

public void startDocument() 
{ 
    accumulator = new StringBuffer(); 
} 
} 

, 나는 문자열을 기대 SAXXMLParser.saxParse (문자열, 문자열) 반환 (기억)하지만 항상 널 기억하는 전화.

답변

1

는 대신 remember

또는

전화 sax.parse(is , this); 대신 일을 사람들의 sax.parse(is , dh);

+0

하나, 감사의 dh.remember를 반환해야합니다. 그것을 확장하는 내 defaulthandler 클래스를 사용할 수 있다고 가정했는데 .... 할 수 없다! – Snake

+0

SAXXmlParser 클래스의 다른 인스턴스를 통해 색소폰 이벤트를 전달하지만 이벤트가 현재 인스턴스를 통과하는 것처럼 필드를 반환한다는 것은 문제입니다. '기억'이 클래스의 정적 필드 인 경우 코드가 작동했을 것입니다. –

관련 문제