加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SAX解析XMl

发布时间:2020-12-16 00:33:18 所属栏目:百科 来源:网络整理
导读:// 载入xml //1.创建解析工厂 SAXParserFactory factory=SAXParserFactory.newInstance(); //2.得到解析器 SAXParser sp=factory.newSAXParser(); //3.得到读取器 XMLReader reader=sp.getXMLReader(); //4.设置内容处理器 本步骤最重要 第五步已经完成处理

// 载入xml

//1.创建解析工厂

SAXParserFactory factory=SAXParserFactory.newInstance();
//2.得到解析器
SAXParser sp=factory.newSAXParser();
//3.得到读取器
XMLReader reader=sp.getXMLReader();

//4.设置内容处理器 本步骤最重要 第五步已经完成处理了

reader.setContentHandler(new ListHandler ());
//5.读取xml文档内容

reader.parse("src/book.xml");


//得到xml文档所有内容
class
ListHandlerimplements ContentHandler{

//遇到开始标签
@Override
public void startElement(String uri,String localName,String qName,
Attributes atts) throws SAXException {
System.out.println("<"+qName+">");
for (int i=0;atts!=null && i<atts.getLength();i++){
String attName=atts.getQName(i);
String attValue=atts.getValue(i);
System.out.println(attName+"="+attValue);
}
}

//标签体内容
@Override
public void characters(char[] ch,int start,int length)
throws SAXException {
System.out.println(new String(ch,start,length));}
//结束标签
public void endElement(String uri,String qName)
System.out.println("</"+qName+">");

}
//此接口有很多方法 此处未用到没写出
}

//获取指定标签

//4.设置内容处理器
reader.setContentHandler(new TagValueHandler());


// 获取指定标签 作者 的值
class TagValueHandler extends DefaultHandler {
private String currentTag;// 记住当前解析器得到的是什么标签
private int needNumber = 2;// 记住想获取第几个作者标签的值
private int currentNumber;// 当前解析的是第几个


@Override
public void startElement(String uri,
Attributes attributes) throws SAXException {
currentTag = qName;
if ("作者".equals(currentTag))
currentNumber++;
}


@Override
public void characters(char[] ch,int length)
throws SAXException {
if ("作者".equals(currentTag) && currentNumber == needNumber) {
System.out.println(new String(ch,length));
}
}


@Override
public void endElement(String uri,String qName)
throws SAXException {
currentTag = null;
}



}


//将内容封装为bean

reader.setContentHandler(new BeanListHandler());

// 把每一本书封装到一个book对象,并把book对象 class BeanListHandler extends DefaultHandler { private List<Book> list = new ArrayList<Book>(); public List<Book> getList() { return list; } private String currentTag; private Book book; @Override public void startElement(String uri,Attributes attributes) throws SAXException { currentTag = qName; if ("书".equals(currentTag)) { book = new Book(); } } @Override public void characters(char[] ch,int length) throws SAXException { if ("书名".equals(currentTag)) { book.setName(new String(ch,length)); } if ("作者".equals(currentTag)) { book.setAuthor(new String(ch,length)); } if ("售价".equals(currentTag)) { book.setPrice(new String(ch,length)); } } @Override public void endElement(String uri,String qName) throws SAXException { if (qName.equals("书")) { list.add(book); book = null; } currentTag = null;// 这句有必要不加 报空指针异常 } }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读