23.pull解析与sax解析
pull解析
public class Demo03_PullXmlPaser {
public static void main(String[] args) throws Exception {
// 1.根据xml的格式,创建javabean类
// 2.用url路径,返回InputStream
String baseUrl = "http://10.0.184.253:8080/Day30_Server/teacher.xml";
List<Teacher> list = parseXmlUsePull(baseUrl);
// 3.遍历list集合
for (Teacher t : list) {
System.out.println(t.getId() + "\t" + t.getName() + "\t"
+ t.getAge());
List<Book> books = t.getBooks();
for (Book b : books) {
System.out
.println("\t" + b.getBookName() + "\t" + b.getPrice());
}
}
}
/**
* 根据指定的url路径,打开输入流
*/
public static InputStream getXmlFromServer(String baseUrl) throws Exception {
URL url = new URL(baseUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
if (connection.getResponseCode() == 200) {
InputStream inputStream = connection.getInputStream();
return inputStream;
}
return null;
}
/**
* 给定一个url路径,解析xml文件,返回list集合
*/
public static List<Teacher> parseXmlUsePull(String baseUrl)
throws Exception {
// 1.创建解析器的工厂对象,工厂对象汇总获取解析器对象
XmlPullParser parser = XmlPullParserFactory.newInstance()
.newPullParser();
// 2.将paser解析器对象,设置解析哪个xml数据
parser.setInput(getXmlFromServer(baseUrl), "utf-8");
List<Teacher> list = null;
Teacher t = null;
List<Book> books = null;
Book book = null;
// 3.解析:
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
// 1.获取标签名
String tagName = parser.getName();
// 2.分支:判断eventType
switch (eventType) {
case XmlPullParser.START_TAG:
if ("teachers".equals(tagName)) {
list = new ArrayList<>();
}
if ("teacher".equals(tagName)) {
t = new Teacher();
t.setId(parser.getAttributeValue(0));
}
if ("name".equals(tagName)) {
t.setName(parser.nextText());
}
if ("age".equals(tagName)) {
t.setAge(Integer.parseInt(parser.nextText()));
}
if ("books".equals(tagName)) {
books = new ArrayList<>();
}
if ("book".equals(tagName)) {
book = new Book();
}
if ("bookName".equals(tagName)) {
book.setBookName(parser.nextText());
}
if ("price".equals(tagName)) {
book.setPrice(Double.parseDouble(parser.nextText()));
}
break;
case XmlPullParser.END_TAG:
if ("book".equals(tagName)) {
// 将book独享,存入集合
books.add(book);
book = null;
}
if ("books".equals(tagName)) {
t.setBooks(books);
books = null;
}
if ("teacher".equals(tagName)) {
list.add(t);
t = null;
}
break;
}
// 3.获取下次的事件
eventType = parser.next();
}
return list;
}
}
public class Demo01_PullXmlParse {
public static void main(String[] args) {
// 开始解析文档事件
System.out.println(XmlPullParser.START_DOCUMENT);// 0
// 结束解析文档事件
System.out.println(XmlPullParser.END_DOCUMENT);// 1
// 开始解析标签事件
System.out.println(XmlPullParser.START_TAG);// 2
// 结束标签事件
System.out.println(XmlPullParser.END_TAG);// 3
// 文本事件
System.out.println(XmlPullParser.TEXT);// 4
int[] a = { 1, 2, 3, 4, 5, 6, 7, 8 };
int sum = 0;
for (int i = 0; i < a.length; i++) {
sum += a[i]; }
System.out.println(sum);}}
public static void main(String[] args) throws Exception {
// 1.根据xml的格式,创建javabean类
// 2.用url路径,返回InputStream
String baseUrl = "http://10.0.184.253:8080/Day30_Server/teacher.xml";
List<Teacher> list = parseXmlUsePull(baseUrl);
// 3.遍历list集合
for (Teacher t : list) {
System.out.println(t.getId() + "\t" + t.getName() + "\t"
+ t.getAge());
List<Book> books = t.getBooks();
for (Book b : books) {
System.out
.println("\t" + b.getBookName() + "\t" + b.getPrice());
}
}
}
/**
* 根据指定的url路径,打开输入流
*/
public static InputStream getXmlFromServer(String baseUrl) throws Exception {
URL url = new URL(baseUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
if (connection.getResponseCode() == 200) {
InputStream inputStream = connection.getInputStream();
return inputStream;
}
return null;
}
/**
* 给定一个url路径,解析xml文件,返回list集合
*/
public static List<Teacher> parseXmlUsePull(String baseUrl)
throws Exception {
// 1.创建解析器的工厂对象,工厂对象汇总获取解析器对象
XmlPullParser parser = XmlPullParserFactory.newInstance()
.newPullParser();
// 2.将paser解析器对象,设置解析哪个xml数据
parser.setInput(getXmlFromServer(baseUrl), "utf-8");
List<Teacher> list = null;
Teacher t = null;
List<Book> books = null;
Book book = null;
// 3.解析:
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
// 1.获取标签名
String tagName = parser.getName();
// 2.分支:判断eventType
switch (eventType) {
case XmlPullParser.START_TAG:
if ("teachers".equals(tagName)) {
list = new ArrayList<>();
}
if ("teacher".equals(tagName)) {
t = new Teacher();
t.setId(parser.getAttributeValue(0));
}
if ("name".equals(tagName)) {
t.setName(parser.nextText());
}
if ("age".equals(tagName)) {
t.setAge(Integer.parseInt(parser.nextText()));
}
if ("books".equals(tagName)) {
books = new ArrayList<>();
}
if ("book".equals(tagName)) {
book = new Book();
}
if ("bookName".equals(tagName)) {
book.setBookName(parser.nextText());
}
if ("price".equals(tagName)) {
book.setPrice(Double.parseDouble(parser.nextText()));
}
break;
case XmlPullParser.END_TAG:
if ("book".equals(tagName)) {
// 将book独享,存入集合
books.add(book);
book = null;
}
if ("books".equals(tagName)) {
t.setBooks(books);
books = null;
}
if ("teacher".equals(tagName)) {
list.add(t);
t = null;
}
break;
}
// 3.获取下次的事件
eventType = parser.next();
}
return list;
}
}
public class Demo01_PullXmlParse {
public static void main(String[] args) {
// 开始解析文档事件
System.out.println(XmlPullParser.START_DOCUMENT);// 0
// 结束解析文档事件
System.out.println(XmlPullParser.END_DOCUMENT);// 1
// 开始解析标签事件
System.out.println(XmlPullParser.START_TAG);// 2
// 结束标签事件
System.out.println(XmlPullParser.END_TAG);// 3
// 文本事件
System.out.println(XmlPullParser.TEXT);// 4
int[] a = { 1, 2, 3, 4, 5, 6, 7, 8 };
int sum = 0;
for (int i = 0; i < a.length; i++) {
sum += a[i]; }
System.out.println(sum);}}
Sax解析
public class Demo01_SaxParser {
public static void main(String[] args) {
// 以sax解析的方式,解析user.xml
// step1:创建javabean对象
// step2:获取sax解析器工厂类的对象
SAXParserFactory factory = SAXParserFactory.newInstance();
try {
// step3:从工厂中获取解析器对象
SAXParser parser = factory.newSAXParser();
// step4:
MyHandler handler = new MyHandler();
parser.parse(new File("user.xml"), handler);// 解析,1.下载
// step5:获取数据
List<User> list = handler.getList();
// 6.遍历集合
for (User u : list) {
System.out.println(u);
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 该类用于,sax处理xml文件的解析
*
* @author Administrator
*/
public class MyHandler extends DefaultHandler {
private List<User> list;// 创建集合
private User user = null;// 创建一个user对象
private String tagName;// 当前的标签名字
public List<User> getList() {
return list;
}
@Override
public void startDocument() throws SAXException {
System.out.println("=====startDocument()--开始解析文档=======");
// 如果是开始解析了,就创建一个list集合
list = new ArrayList<>();//
}
@Override
public void endDocument() throws SAXException {
System.out.println("=====endDocument()--结束解析文档=======");
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
System.out.println("=====startElement()--开始解析标签=======" + qName);
tagName = qName;
// qName:标签名
if ("user".equals(qName)) {
// 1.如果是user标签,创建对象
user = new User();
// 2.获取属性,赋值
if (attributes != null) {
for (int i = 0; i < attributes.getLength(); i++) {
String qName2 = attributes.getQName(i);
// String strId = attributes.getValue(0);
String value = attributes.getValue(qName2);
if ("id".equals(qName2)) {
user.setId(value);
}
if ("birthday".equals(qName2)) {
user.setBirthday(value);
}pooolllllllllllllllllllllllllllllllllllllll
}
}
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.println("=====endElement()--结束解析标签=======");
tagName = "";
if ("user".equals(qName)) {
list.add(user);
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
System.out.println("=====characters()--文本标签======");
String content = new String(ch, start, length);// 文本内容
System.out.println("---" + content + "---");
if ("name".equals(tagName)) {
user.setName(content);
} else if ("age".equals(tagName)) {
user.setAge(Integer.parseInt(content));
} else if ("sex".equals(tagName)) {
user.setSex(content.charAt(0));
}
}
}

浙公网安备 33010602011771号