• android学习笔记(02)-Sax解析XML与JSON的解析


    Sax解析
    --------------

    1.解析方式:边读边解析

    2.读到特定标签的时候,自动调用相应的方法进行操作

    3.不会造成内存的溢出

    4.不能修改xml文件

      

    Sax解析

     

    //SaxParserTest.java

      1 import java.util.ArrayList;
      2 
      3 import javax.xml.parsers.ParserConfigurationException;
      4 import javax.xml.parsers.SAXParser;
      5 import javax.xml.parsers.SAXParserFactory;
      6 
      7 import org.junit.Test;
      8 import org.xml.sax.Attributes;
      9 import org.xml.sax.SAXException;
     10 import org.xml.sax.XMLReader;
     11 import org.xml.sax.helpers.DefaultHandler;
     12 
     13 import com.hzg.xmlParse.bean.Book;
     14 
     15 public class SaxParserTest {
     16     @Test
     17     public void saxParser() throws Exception{
     18         //获取工厂
     19         SAXParserFactory parserFactory = SAXParserFactory.newInstance();
     20         SAXParser saxParser = parserFactory.newSAXParser();
     21         //获取xmlReader通过reader可以试着ContentHandler
     22         XMLReader xmlReader = saxParser.getXMLReader();
     23         //给xmlRead设置contentHandler contentHandler是一个接口里面太多的方法没实现
     24         //不去直接实现contentHandler而是继承他的默认的实现DefaultHandler
     25         xmlReader.setContentHandler(new MyHandler());
     26         xmlReader.parse("Books.xml");
     27         
     28         
     29     }
     30     
     31     private class MyHandler extends DefaultHandler{
     32 
     33         @Override
     34         public void characters(char[] ch, int start, int length) throws SAXException {
     35             String text = new String(ch, start, length);
     36             System.out.println("文本内容"+text);
     37         }
     38 
     39         @Override
     40         public void endDocument() throws SAXException {
     41             System.out.println("wendangjieshu");
     42         }
     43 
     44         @Override
     45         public void endElement(String uri, String localName, String qName) throws SAXException {
     46             System.out.println("jieshu标签<"+ qName +">");
     47         }
     48 
     49         @Override
     50         public void startDocument() throws SAXException {
     51             System.out.println("wendangkaishi");
     52         }
     53 
     54         @Override
     55         public void startElement(String uri, String localName, String qName, Attributes attributes)
     56                 throws SAXException {
     57             System.out.println("开始标签<"+ qName +">");
     58             
     59         }
     60         
     61     }
     62     
     63     
     64     //获取第二本书的售价
     65     @Test
     66     public void saxParserTest2() throws Exception{
     67         SAXParserFactory parserFactory = SAXParserFactory.newInstance();
     68         SAXParser parser = parserFactory.newSAXParser();
     69         XMLReader reader = parser.getXMLReader();
     70         reader.setContentHandler(new DefaultHandler(){
     71             boolean isPrice = false;
     72             int count = 0;
     73             @Override
     74             public void characters(char[] ch, int start, int length) throws SAXException {
     75                 if(isPrice && count == 2){
     76                     System.out.println(new String(ch, start, length));
     77                 }
     78             }
     79 
     80             @Override
     81             public void endElement(String uri, String localName, String qName) throws SAXException {
     82                 if("example:售价".equals(qName)){
     83                     isPrice = false;
     84                 }
     85             }
     86 
     87             @Override
     88             public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
     89                 if("example:售价".equals(qName)){
     90                     isPrice = true;
     91                     count++;
     92                 }
     93             }
     94             
     95         });
     96         reader.parse("Books.xml");
     97     
     98     }
     99     
    100     //生成集合
    101     @Test
    102     public void saxParse2list() throws Exception{
    103         SAXParserFactory parserFactory = SAXParserFactory.newInstance();
    104         SAXParser parser = parserFactory.newSAXParser();
    105         XMLReader reader = parser.getXMLReader();
    106         reader.setContentHandler(new DefaultHandler(){
    107             ArrayList<Book> bookshelf = null;
    108             Book book = null;
    109             String tag = null;
    110             @Override
    111             public void characters(char[] ch, int start, int length) throws SAXException {
    112                 if("example:书名".equals(tag)){
    113                     book.setTitle(new String(ch,start,length));
    114                 }else if("example:作者".equals(tag)){
    115                     book.setAuthor(new String(ch,start,length));
    116                 }else if("example:售价".equals(tag)){
    117                     book.setPrice(new String(ch,start,length));
    118                 }
    119             }
    120 
    121             @Override
    122             public void endElement(String uri, String localName, String qName) throws SAXException {
    123                 //每次标签结束把tag设置为null
    124                 tag = null;
    125                 if("example:书架".equals(qName)){
    126                     for(Book book1:bookshelf){
    127                         System.out.println(book1);
    128                     }
    129                 }else if("example:书".equals(qName)){
    130                     //读到书的结束标签 把book对象添加到集合中
    131                     bookshelf.add(book);
    132                 }
    133             }
    134 
    135             @Override
    136             public void startElement(String uri, String localName, String qName, Attributes attributes)
    137                     throws SAXException {
    138                 if("example:书架".equals(qName)){
    139                     //创建集合
    140                     bookshelf = new ArrayList<Book>();
    141                 }else if("example:书".equals(qName)){
    142                     //创建对象
    143                     book = new Book();
    144                 }else if("example:书名".equals(qName)){
    145                     tag = "example:书名";
    146                 }else if("example:作者".equals(qName)){
    147                     tag = "example:作者";
    148                 }else if("example:售价".equals(qName)){
    149                     tag = "example:售价";
    150                 }
    151             }
    152             
    153         });
    154         reader.parse("Books.xml");
    155         
    156     }
    157 }

    //Book.java

     1 public class Book {
     2     private String title;
     3     private String author;
     4     private String price;
     5     public String getTitle() {
     6         return title;
     7     }
     8     public void setTitle(String title) {
     9         this.title = title;
    10     }
    11     public String getAuthor() {
    12         return author;
    13     }
    14     public void setAuthor(String author) {
    15         this.author = author;
    16     }
    17     public String getPrice() {
    18         return price;
    19     }
    20     public void setPrice(String price) {
    21         this.price = price;
    22     }
    23     @Override
    24     public String toString() {
    25         return "Book [title=" + title + ", author=" + author + ", price=" + price + "]";
    26     }
    27     
    28     
    29 }


    JSON(JavaScript Object Notation)
    --------------
    JavaScript对象表示法
    规则:
    1.映射用冒号(":")表示。名称:值
    2.并列的数据之间用(",")分隔。名称1:值1,名称2:值2
    3.映射的集合(对象)用大括号("{}")表示。{名称1:值1,名称2:值2}
    4.并列的集合(数组)用方括号("[]")表示。
    [
    {名称1:值1,名称2:值2}
    {名称1:值1,名称2:值2}
    ]
    5.元素值可具有的类型:string, number, object, array, true, false, null

    JSON的解析
    --------------
    org.json, json-lib, gson


    org.json解析JSON
    --------------
    官网:http:www.json.org/java/
    常见API:

    1 //将json字符串转换成JSONObject对象
    2 JSONObject jb = new JSONObject(String source);
    3 Object get(String key);
    4 int getInt(String key);
    5 String getString(String key);
    6 XXX getXXX(String key);
    7 JSONArray getJSONArray(String key);

    //将json字符串转成JSONArray对象
     JSONArray jsArray = new JSONArray(String source); 

    JSON解析示例:

     1 import org.json.*;
     2 
     3 public class JsonParseDemo {
     4     
     5     public  static void main(String [] args) throws Exception{
     6         jsonTest();
     7     }
     8     
     9     public static void jsonTest() throws Exception{
    10         //
    11         String jstring = "{'name':'是否','age':'20'}";
    12         //通过一个具有json格式的字符串可以创建一个json对象
    13         JSONObject obj = new JSONObject(jstring);
    14         //获取json对象之后就可以通过key去取值
    15         String name = obj.getString("name");
    16         int age = obj.getInt("age");
    17         System.out.println("名字"+name+"age"+age);
    18         
    19         
    20         //遍历name
    21         String jsonArray = "[{'name':'是否','age':'20'},{'name':'adf','age':'25'}]";
    22         //根据一个具有json数组格式的字符串创建一个json数组对象
    23         JSONArray array = new JSONArray(jsonArray);
    24         for(int i = 0; i< array.length();i++){
    25             //根据索引取出每一个jsonobject
    26             JSONObject jsonObject = array.getJSONObject(i);
    27             //
    28             name = jsonObject.getString("name");
    29             System.out.println(name);
    30         }
    31         
    32     }
    33 }
  • 相关阅读:
    网页挂马实验
    基于内核网络过滤实验
    基与内核的键盘记录实验
    网络蠕虫病毒代码分析
    脚本病毒编写实验
    病毒查找与清除实验
    木马分析(植入分析)实验
    木马分析(控制分析)实验
    木马分析(隐藏分析)实验
    移动存储型病毒分析实验
  • 原文地址:https://www.cnblogs.com/8386blogs/p/7297842.html
Copyright © 2020-2023  润新知