sax解析xml时,遇到像<、>、&等特殊字符时,会把节点中的内容当做三段内容读取,而我们原先的方式是只做一次读取,这样会造成只能读取到特殊字符前的内容。
上测试案例:
public class MyHandler extends DefaultHandler implements LexicalHandler {
private StringBuffer str = null;
@Override
public void fatalError(SAXParseException e) throws SAXException {
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
str = new StringBuffer();
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
super.endElement(uri, localName, qName);
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
str.append(ch, start, length);
}
@Override
public void startEntity(String name) throws SAXException {
}
@Override
public void endEntity(String name) throws SAXException {
}
@Override
public void startDTD(String name, String publicId, String systemId)
throws SAXException {
}
@Override
public void endDTD() throws SAXException {
}
@Override
public void startCDATA() throws SAXException {
}
@Override
public void endCDATA() throws SAXException {
}
@Override
public void comment(char[] ch, int start, int length) throws SAXException {
// TODO Auto-generated method stub
}
}
调用:
final String ss = "<?xml version=\"1.0\" encoding=\"gbk\"?><data><url>http://192.168.33.194:8080/MobleTest/step3.jsp?app=test&param=opps</url><title>百度</title></data>";
SAXParserFactory saxparserfactory = SAXParserFactory.newInstance();
SAXParser saxparser = saxparserfactory.newSAXParser();
saxparser.parse(new java.io.ByteArrayInputStream(ss.getBytes()), new MyHandler());