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 (문자열, 문자열) 반환 (기억)하지만 항상 널 기억하는 전화.
하나, 감사의
dh.remember
를 반환해야합니다. 그것을 확장하는 내 defaulthandler 클래스를 사용할 수 있다고 가정했는데 .... 할 수 없다! – SnakeSAXXmlParser 클래스의 다른 인스턴스를 통해 색소폰 이벤트를 전달하지만 이벤트가 현재 인스턴스를 통과하는 것처럼 필드를 반환한다는 것은 문제입니다. '기억'이 클래스의 정적 필드 인 경우 코드가 작동했을 것입니다. –