概述
importjava.io.InputStream;importjava.util.ArrayList;importjava.util.List;importjavax.xml.parsers.SAXParser;importjavax.xml.parsers.SAXParserFactory;importorg.xml.sax.Attributes;importorg.xml.sax.SAXException;importorg.xml.sax.helpers.DefaultHandler;public class SaxParseService extendsDefaultHandler{private List books = null;private Book book = null;private String preTag = null;//作用是记录解析时的上一个节点名称
/*** 特殊字符数量很多时方法1显然不实用此时可用转义来实现
* < <
* > >
* & &
* ' '
* " "
* 即将xml中的特殊文档全部替换为转义字符
* 如变成<thinking in java>。
* 但是对于这种情况解析过程会发生变化不是一次性解析
* 而是分三步先解析<然后是thinking in java然后是>
* 因此要注意想要获得中数据必须要用StringBuffer将这三部分加起来。
**/StringBuffer sb= newStringBuffer();public List getBooks(InputStream xmlStream) throwsException{
SAXParserFactory factory=SAXParserFactory.newInstance();
SAXParser parser=factory.newSAXParser();
SaxParseService handler= newSaxParseService();
parser.parse(xmlStream, handler);returnhandler.getBooks();
}public ListgetBooks(){returnbooks;
}
@Overridepublic void startDocument() throwsSAXException {
books= new ArrayList();
}
@Overridepublic void startElement(String uri, String localName, String qName, Attributes attributes) throwsSAXException {
sb.delete(0, sb.length()); //清除字符内容
if("book".equals(qName)){
book= newBook();
book.setId(Integer.parseInt(attributes.getValue(0)));
}
preTag= qName;//将正在解析的节点名称赋给preTag
}
@Overridepublic voidendElement(String uri, String localName, String qName)throwsSAXException {if("book".equals(qName)){
books.add(book);
book= null;
}
preTag= null;/**当解析结束时置为空。这里很重要,例如,当图中画3的位置结束后,会调用这个方法
,如果这里不把preTag置为null,根据startElement(....)方法,preTag的值还是book,当文档顺序读到图
中标记4的位置时,会执行characters(char[] ch, int start, int length)这个方法,而characters(....)方
法判断preTag!=null,会执行if判断的代码,这样就会把空值赋值给book,这不是我们想要的。*/}
@Overridepublic void characters(char[] ch, int start, int length) throwsSAXException {if(preTag!=null){//String content = new String(ch,start,length);
sb.append(ch,start,length);//字符相加
String content =sb.toString();if("name".equals(preTag)){
book.setName(content);
}else if("price".equals(preTag)){
book.setPrice(Float.parseFloat(content));
}
}
}
}
最后
以上就是自信毛豆为你收集整理的java xml解析特殊符号_SAX解析XML出现特殊字符的全部内容,希望文章能够帮你解决java xml解析特殊符号_SAX解析XML出现特殊字符所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复