Stax解析XML

   最近学习了三种解析XML的方式 SAX DOCUMENT STAX ,下面记录一下Stax对于xml文件的解析。共有三种方式
//基于光标的处理
	@Test
	public void TEST1(){
		//创建XMLStreamReader的工厂
		XMLInputFactory factory=XMLInputFactory.newInstance();
		//创建流
		InputStream is=null;		
		//创建XMLStreamReader
		try {
			is=testTax.class.getClassLoader().getResourceAsStream("li.xml");
			XMLStreamReader reader=factory.createXMLStreamReader(is);
			while(reader.hasNext()){
				//返回节点数字
				//System.out.println(reader.next());
				int i=reader.next();
				if(i==XMLStreamConstants.START_ELEMENT){
					//System.out.println(reader.getName());
					//读取属性的值
					if("book".equals(reader.getName().toString())){
						System.out.println(reader.getAttributeName(0)+":"+reader.getAttributeValue(0));
					}
					//获取元素的文本信息
					if("title".equals(reader.getName().toString())){
						System.out.println(reader.getElementText());
					}
				}else if(i==XMLStreamConstants.CHARACTERS){
					//获取文本
					//System.out.println(reader.getText().trim());
				}else if(i==XMLStreamConstants.END_ELEMENT){
					System.out.println(reader.getName());
				}
			}
			

//基于迭代的解析方式
	@Test
	public void TEST2(){
		XMLInputFactory factory=XMLInputFactory.newInstance();
		InputStream is=null;		
		try {
			is=testTax.class.getClassLoader().getResourceAsStream("li.xml");
			XMLEventReader reader=factory.createXMLEventReader(is);
			while(reader.hasNext()){
				//通过xmlEvent来获取是否是某种节点类型
				XMLEvent event=reader.nextEvent();
				if(event.isStartElement()){
					//通过asxxx转换节点
					String name=event.asStartElement().getName().toString();
					if("price".equals(name)){
						System.out.println(reader.getElementText());
					}
					//获取元素的文本信息
					if("title".equals(name)){
						System.out.println(reader.getElementText());
					}
				}
			}		

//过滤器
	@Test
	public void TEST3(){
		XMLInputFactory factory=XMLInputFactory.newInstance();
		InputStream is=null;		
		try {
			is=testTax.class.getClassLoader().getResourceAsStream("li.xml");
			//过滤掉不用的节点
			XMLEventReader reader=factory.createFilteredReader(factory.createXMLEventReader(is), 
					new EventFilter() {
						@Override
						public boolean accept(XMLEvent event) {
							if(event.isStartElement()){
								return true;
							}
							return false;
						}
					});
			while(reader.hasNext()){
				//通过xmlEvent来获取是否是某种节点类型
				XMLEvent event=reader.nextEvent();
				if(event.isStartElement()){
					//通过asxxx转换节点
					String name=event.asStartElement().getName().toString();
					if("price".equals(name)){
						System.out.println(reader.getElementText());
					}
					//获取元素的文本信息
					if("title".equals(name)){
						System.out.println(reader.getElementText());
					}
				}
			}		
//Xpath的解析方式
	@Test
	public void TEST4(){
		InputStream is=null;
		try {
			is=testTax.class.getClassLoader().getResourceAsStream("li.xml");
			//创建文档处理对象
			DocumentBuilder db=DocumentBuilderFactory.newInstance().newDocumentBuilder();
			//创建文档对象
			Document doc=db.parse(is);
			//创建Xpath对象
			XPath xp=XPathFactory.newInstance().newXPath();
			//参数:xpath ; 文档 ;节点
			NodeList list =(NodeList)xp.evaluate("//book[@category='WEB']", doc, XPathConstants.NODESET);
			for(int i=0;i<list.getLength();i++){
				Element e1=(Element)list.item(i);
				System.out.println(e1.getElementsByTagName("title").item(0).getTextContent());
			}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值