SAX解析器字符方法不会收集所有内容

use*_*806 4 java xml sax

我正在使用SAX解析器来解析XML,并且工作正常。

我在XML中有以下标记。

<value>•CERTASS >> Certass</value>
Run Code Online (Sandbox Code Playgroud)

在这里,我希望输出“ •CERTASS >> Certass ”。但下面的代码仅返回Certassvalue标签的特殊字符有什么问题吗?

public void characters(char[] buffer, int start, int length) {
           temp = new String(buffer, start, length);
    }
Run Code Online (Sandbox Code Playgroud)

Rud*_*haw 5

不能保证该characters()方法在一个元素内只能运行一次

如果将内容存储在中String,并且该characters()方法恰巧运行两次,则只能从第二次运行中获取内容。字符方法第二次运行时,它将覆盖temp第一次存储的变量内容。

为了解决这个问题,使用StringBuilderappend()内容中characters(),然后在处理内容endElement()。例如:

 DefaultHandler handler = new DefaultHandler() {
     private StringBuilder stringBuilder;

     @Override
     public void startElement(String uri, String localName,String qName, Attributes attributes) throws SAXException {
         stringBuilder = new StringBuilder();
     }

     public void characters(char[] buffer, int start, int length) {
         stringBuilder.append(new String(buffer, start, length));
     }

     public void endElement(String uri, String localName, String qName) throws SAXException {
         System.out.println(stringBuilder.toString());
     }
 };
Run Code Online (Sandbox Code Playgroud)

解析String<value>•CERTASS >> Certass</value>”和上面的处理程序将给出输出:

?CERTASS >> Certass
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助。