微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

xml的解析二

使用jaxp的sax方式解析xml

sax方式不能实现增删改操作,只能做查询操作

打印出整个文档

执行parse方法,第一个参数xml路径,第二个参数是 事件处理器

创建一个类,继承事件处理器的类,重写里面的三个方法

获取到所有的name元素的值

  • 定义一个成员变量 flag= false
  • 判断开始方法是否是name元素,如果是name元素,把flag值设置成true
  • 如果flag值是true,在characters方法里面打印内容
  • 当执行到结束方法时候,把flag值设置成false
获取一个name元素的值
  • 定义一个成员变量 idx=1
  • 在结束方法时候,idx+1 idx++
  • 想要打印出第一个name元素的值,在characters方法里面判断,判断flag=true 并且 idx==1,在打印内容
案例:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<person>
	<p1>
		<name>张三</name>
		<age>20</age>
	</p1>
	<p1>
		<name>李四</name>
		<age>30</age>
	</p1>
	<p1>
		<name>王五</name>
		<age>40</age>
	</p1>
	<p1>
		<name>赵六</name>
		<age>50</age>
	</p1>
</person>
package com.java.xml;

import java.io.IOException;

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

import org.xml.sax.SAXException;

public class TextSax {

	public static void main(String[] args) throws ParserConfigurationException,SAXException,IOException {
		/*
		 * 1.创建解析器工厂
		 * 2.创建解析器
		 * 3.执行parse方法
		 * 4.自己创建一个类继承DefaultHandler
		 * 5.重写类里面的三个方法
		 */
		//创建解析器工厂
		SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
		//创建解析器
		SAXParser saxParser = saxParserFactory.newSAXParser();
		//执行parse方法
		saxParser.parse("src/person.xml",new MyDefault());
	}
	
}
package com.java.xml;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
 * 实现获取所有的name元素的值
 * @author itachi
 *
 */
public class MyDefault extends DefaultHandler {

	boolean flag = false;
	int idx = 1;
	@Override
	public void startElement(String uri,String localName,String qName,Attributes attributes) throws SAXException {
		//判断qname是否是name元素
		if("name".equals(qName)) {
			flag = true;
		}
	}

	@Override
	public void endElement(String uri,String qName)
			throws SAXException {
		//把flag设置成false,表示name元素结束
		if("name".equals(qName)) {
			flag = false;
			idx++;
		}
	}

	@Override
	public void characters(char[] ch,int start,int length)
			throws SAXException {
		//当flag值是true时候,表示解析到name元素,索引是1
		if(flag == true && idx == 3) {
			System.out.println(new String(ch,start,length));
		}
	}
	
	
}

原文地址:https://www.jb51.cc/xml/294828.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。