【问题标题】:SAX callback not updating global stringbufferSAX 回调未更新全局字符串缓冲区
【发布时间】:2012-04-27 20:17:07
【问题描述】:

需要帮助弄清楚为什么我的字符串缓冲区在使用被覆盖的 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) 期望返回一个字符串(记住),但记住始终为 null。

【问题讨论】:

    标签: java sax stringbuffer


    【解决方案1】:

    您需要返回dh.remember 而不是remember

    调用sax.parse( is , this ); 而不是sax.parse( is , dh );

    【讨论】:

    • 其中任何一个都有效,谢谢。我以为我可以使用扩展它的默认处理程序类....我不能!
    • 问题是您正在通过 SAXXmlParser 类的不同实例传递 sax 事件,但返回字段就像事件正在通过当前实例一样。如果“记住”是类上的静态字段,您的代码就会起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    • 2021-12-30
    • 2016-10-22
    相关资源
    最近更新 更多