2

上書きされた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(string、string)を呼び出します(覚えておいてください)が、rememberは常にnullです。

4

1 に答える 1

1

dh.remember代わりに戻る必要がありますremember

また

sax.parse( is , this );代わりに呼び出すsax.parse( is , dh );

于 2012-04-27T20:22:58.513 に答える