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());