使用JAXP进行sax解析
//创建解析工厂
SAXParserFactory factory=
SAXParserFactory.newInstance();
//得到解析工具
SAXParser parse=
factory.newSAXParser();
//得到读取器
XMLReader read=
parse.getXMLReader();
//设置内容处理
read.setContentHandler(
new ListHander());
//5.读取xml内容
read.parse(
"src/Demo2.xml");
}
}
//得到xml中所有的内内容
class ListHander implements ContentHandler{
@Override
public void characters(
char[] ch,
int start,
int length)
throws SAXException {
System.out.print(
new String(ch,start,length));
}
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.println(
"</"+qName+
">");
}
@Override
public void endPrefixMapping(String prefix) throws SAXException {
// TODO Auto-generated method stub
}
@Override
public void ignorableWhitespace(
char[] ch,
int start,
int length)
throws SAXException {
// TODO Auto-generated method stub
}
@Override
public void processingInstruction(String target, String data)
throws SAXException {
// TODO Auto-generated method stub
}
@Override
public void setDocumentLocator(Locator locator) {
// TODO Auto-generated method stub
}
@Override
public void skippedEntity(String name) throws SAXException {
// TODO Auto-generated method stub
}
@Override
public void startDocument() throws SAXException {
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes atts) throws SAXException {
System.out.print(
"<"+
qName);
for(
int i=
0;atts!=
null&&i<atts.getLength();i++
){
System.out.print(
" "+atts.getQName(i) +
"="+atts.getValue(i)+
" ");
}
System.out.print(
">");
}
@Override
public void startPrefixMapping(String prefix, String uri)
throws SAXException {
// TODO Auto-generated method stub
}
}
//得到制定的标签名:DefaultHandler实现了ContentHandler接口
class TagValue2 extends DefaultHandler{
private String needName=
"书名";
private String currentName=
null;
private int currentNumber=
0;
private int needNumber=
2;
@Override
public void startElement(String arg0, String arg1, String qName,
Attributes arg3) throws SAXException {
currentName=
qName;
if(currentName.equals(needName)){
currentNumber++
;
}
}
@Override
public void characters(
char[] ch,
int arg1,
int arg2) throws SAXException {
System.out.println(currentName);
if((currentNumber==needNumber)&&
(currentName.equals(needName))){
System.out.println(
new String(ch,arg1,arg2));
}
}
@Override
public void endElement(String arg0, String arg1, String arg2)
throws SAXException {
}
//把xml文档中的每一本书封装到Book对象中,并把多个List对象中,并返回
class T extends DefaultHandler{
private ArrayList<Book> list=
new ArrayList<Book>
();
private Book book;
private String name;
public ArrayList<Book>
getList(){
return list;
}
@Override
public void characters(
char[] ch,
int start,
int length)
throws SAXException {
String str=
new String(ch,start,length);
if((
"书名").equals(name)){
//equals两边的不能换换了出问题
book.setName(str);
}
if((
"价钱").equals(name)){
book.setPrice(str);
}
if((
"作者").equals(name)){
book.setAuthor(str);
}
str=
null;
}
@Override
public void endElement(String arg0, String arg1, String qName)
throws SAXException {
if(qName.equals(
"书")){
list.add(book);
book=
null;
}
name=
null;
//注意要置空
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes atts) throws SAXException {
name=
qName;
if(name.equals(
"书"))
book=
new Book();
}
}
转载请注明原文地址: https://mac.8miu.com/read-508537.html