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

sax解析xml案例

发布时间:2020-12-15 22:22:37 所属栏目:百科 来源:网络整理
导读:有一个xml文档 ?xml version="1.0" encoding="UTF-8" standalone="no"?书架书书名 name="xxxx"java web/书名作者张大/作者价格102/价格/书书书名spring/书名作者呜呜/作者价格55/价格/书/书架 解析所有节点 package cn.itcast.sax;import javax.xml.parsers.

有一个xml文档

<?xml version="1.0" encoding="UTF-8" standalone="no"?><书架>
	<书>
		<书名 name="xxxx">java web</书名>
		<作者>张大</作者>
		<价格>102</价格>
	</书>
	<书>
		<书名>spring</书名>
		<作者>呜呜</作者>
		<价格>55</价格>
	</书>
</书架>

解析所有节点
package cn.itcast.sax;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;

public class Demo1 {
	public static void main(String[] args) throws Exception {
		
		//1.创建工厂
		SAXParserFactory saxP = SAXParserFactory.newInstance();
		
		//2.得到解析器
		SAXParser parser = saxP.newSAXParser();
		
		//3.得到读取器
		XMLReader xmlR = parser.getXMLReader();
		
		//4.设置内容处理器
		xmlR.setContentHandler(new ParseS());
		//5.读取xml内容
		xmlR.parse("src/book.xml");
	}
}

//得到xml文档的内容
class ParseS implements ContentHandler{

	@Override
	public void setDocumentLocator(Locator locator) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void startDocument() throws SAXException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void endDocument() throws SAXException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void startPrefixMapping(String prefix,String uri)
			throws SAXException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void endPrefixMapping(String prefix) throws SAXException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void startElement(String uri,String localName,String qName,Attributes atts) throws SAXException {
		System.out.println("<"+qName+">");
		for(int i=0; i<atts.getLength(); i++){
			String name = atts.getQName(i);
			String value = atts.getValue(i);
			System.out.println(name+": "+value);
		}
	}

	@Override
	public void endElement(String uri,String qName)
			throws SAXException {
		System.out.println("</"+qName+">");
		
	}

	@Override
	public void characters(char[] ch,int start,int length)
			throws SAXException {
		System.out.println(new String(ch,start,length));
		
	}

	@Override
	public void ignorableWhitespace(char[] ch,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 skippedEntity(String name) throws SAXException {
		// TODO Auto-generated method stub
		
	}
	
}

获取指定标签的值
package cn.itcast.sax;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

public class Demo2 {

	public static void main(String[] args) throws Exception{
		//1.创建工厂
		SAXParserFactory saxP = SAXParserFactory.newInstance();
		
		//2.得到解析器
		SAXParser parser = saxP.newSAXParser();
		
		//3.得到读取器
		XMLReader xmlR = parser.getXMLReader();
		
		//4.设置内容处理器
		xmlR.setContentHandler(new TagHandler());
		//5.读取xml内容
		xmlR.parse("src/book.xml");
		
	}

}

//获取指定标签的值
class TagHandler extends DefaultHandler{
	
	private String currentTag;  //记录当前解析到的标签
	private int needNum = 2;   //记录想获取第几个标签
	private int currentNum;
	
	@Override
	public void startElement(String uri,Attributes attributes) throws SAXException {
		currentTag = qName;
		if("作者".equals(currentTag)){
			currentNum++;
		}
	}

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

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

(编辑:李大同)

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

    推荐文章
      热点阅读