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 }