java - SAX 回调不更新全局字符串缓冲区

标签 java 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( string, string ) 期望返回一个字符串(记住)但 remember 始终为 null。

最佳答案

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

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

关于java - SAX 回调不更新全局字符串缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10357274/

相关文章:

Java.util.Date 空输出

java - 何时以及如何有效地使用 StringBuilder/Buffer?

c# - 这个基本 Java 方法的等效 C# 方法是什么?

java - 实现 ResponseErrorHandler 接口(interface)

Java/Android 无法解释的编译错误 : is not abstract and does not override abstract method onTabReselected(Tab, FragmentTransaction) in TabListener

java - 配置 Xerces SAX 解析器以容忍 XML 语法错误

java - SAX XML 解析器抛出空指针异常

objective-c - 使用Obj-C,Xcode和libxml2的简单libxml2 XML解析示例?

java - 为什么要使用 StringBuilder? StringBuffer 可以与多线程一起工作,也可以与一个线程一起工作吗?

java - Stream<String> 仅输入 Files.lines() 中的最后一行