这是什么啊

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);}}
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));
  }
 }
}
posted @ 2015-12-06 19:32  陈旭缘  阅读(138)  评论(0)    收藏  举报
这是什么