java學習第二階段day7

.xml文件解析(sax pull) ide

sax 解析測試

//一、建立一個學生類 繼承DefaultHandler類
//而後重寫startDocument endDocument startElement endElement characters 方法
//二、在解析.xml文件時 先 進入xml文檔重寫的方法startDocument
//三、而後進入開始標記startElement
//四、在進入標記之間的內容方法裏 characters
//五、在進入結束標記方法裏 endElement
//六、最後 進入結束xml的文檔標誌方法裏 endDocumentxml

學生類對象

public class Student {
 public String name;
 public int age;
 public int id;
 public String toString() {
  return "Student [name=" + name + ", age=" + age + ", id=" + id + "]";
 }
}繼承

-----------------事件

StudentHandler 類utf-8

public class StudentHandler extends DefaultHandler {
 private String tag;//保存標記名
 private Student stu;
 private List<Student> list;
 //
 public List<Student> getlist(){
  return list;
 }
 public void startDocument() throws SAXException {
  list = new ArrayList<Student>();
 }文檔

 public void endDocument() throws SAXException {
 }
//開始的標記
 public void startElement(String uri, String localName, String qName,
   Attributes attributes) throws SAXException {
  tag = qName;
  if("student".equals(tag)){
   stu = new Student();
   //若是開始標記 有 屬性
   for(int i = 0;i<attributes.getLength();i++){
    //獲取開始標記 裏的 屬性標記
    String q_name = attributes.getQName(i);
    //獲取 開始標記裏的 屬性標記 的內容
    String content = attributes.getValue(i);
    if("id".equals(q_name)){
     stu.id = Integer.parseInt(content);
    }else if("name".equals(q_name)){
     stu.name = content;
    }else if("age".equals(q_name)){
     stu.age = Integer.parseInt(content);
    }
    
   }
  }
 }
//結束標記
 public void endElement(String uri, String localName, String qName)
   throws SAXException {
  if("student".equals(qName)){
   list.add(stu);
  }
  tag = "";
 }
//標記之間的內容
 public void characters(char[] ch, int start, int length)
   throws SAXException {
  String str = new String(ch,start,length);
  if("id".equals(tag)){
   stu.id = Integer.parseInt(str);
  }else if("name".equals(tag)){
   stu.name = str;
  }else if("age".equals(tag)){
   stu.age = Integer.parseInt(str);
  }
 }
 
}字符串

---------------------
測試類 SaxXmlget


public class SaxXml {
 public static void main(String[] args) throws Exception {
  //獲得解析工廠
  SAXParserFactory factory = SAXParserFactory.newInstance();
  //經過工廠得到解析器
  SAXParser parser = factory.newSAXParser();
  StudentHandler handler = new StudentHandler();
  //將文件 和 studenthandler 和 解析器 相關聯
  parser.parse("d:\\Student2.xml", handler);
  //須要獲得解析的集合
  List<Student> list = handler.getlist();
   for(Student s : list){
    System.out.println(s);
   }
 }
}
-----------------------------------------------------------------------------

pull 解析

Student2 類

public class Student2 {

 public String name;
 public int age;
 public int id;
 @Override
 public String toString() {
  return "Student2 [name=" + name + ", age=" + age + ", id=" + id + "]";
 }
 
}


------------
pullxml  類

public class PullXml { public static void main(String[] args) {  //pull 解析 xml 文件  //須要導入 第三方包 kxml  //一、建立一個student 類  XmlPullParserFactory factory;  try {   //建立一個解析工廠   factory = XmlPullParserFactory.newInstance();   //從 解析工廠 得到解析器   XmlPullParser parser = factory.newPullParser();   //設置 要解析.xml文件 的路徑   parser.setInput(new FileInputStream("d:\\student.xml"),"utf-8");   //獲取 事件類型   //事件類型有START_DOCUMENT(xml文件開始標記)    //START_TAG(xml開始標記)    //END_DOCUMENT(xml文件結束標記) END_TAG(xml結束標記)   int type = parser.getEventType();   //用while循環 若是 不是 xml文件結束標記 就一直 在裏面循環   String tag;   List<Student2> list = null;   Student2 stu = null; while(type != XmlPullParser.START_DOCUMENT){    //獲取標記 名字 tag = parser.getName(); switch(type){ case XmlPullParser.START_TAG: //若是開始標記 是student 就new 一個學生 對象 if("student".equals(tag)){ stu = new Student2(); //若是 開始標記 裏面也有 標記 屬性  for(int i = 0;i<parser.getAttributeCount();i++){       //獲取開始標記 裏面的 標記屬性 名字 String attribute_name = parser.getAttributeName(i);       //獲取開始標記 裏面的標記屬性 值        String attribute_value = parser.getAttributeValue(i); if("id".equals(attribute_name)){ stu.id = Integer.parseInt(attribute_value) }else if("name".equals(attribute_name)){ stu.name = attribute_value; }else if("age".equals(attribute_name)){ stu.age = Integer.parseInt(attribute_value); } }//----------------------------------------------  }else if("name".equals(tag)){ stu.name = parser.nextText();       //把整數 轉換爲字符串 }else if("id".equals(tag)){ stu.id = Integer.parseInt(parser.nextText()); }else if("age".equals(tag)){ stu.age = Integer.parseInt(parser.nextText()); } break; case XmlPullParser.END_TAG: //若是結束標記 爲student 就把 對象 添加到集合裏 if("student".equals(tag)){ list.add(stu); } break; default: }  //跳到下一個 常量 獲得事件常量 type = parser.next(); }  } catch (XmlPullParserException e) {   // TODO Auto-generated catch block   e.printStackTrace();  } catch (IOException e) {   // TODO Auto-generated catch block   e.printStackTrace();  }    }}

相關文章
相關標籤/搜索