XML的解析

来源:互联网 发布:js正则表达式匹配数字 编辑:程序博客网 时间:2024/06/17 14:42

XML的三种解析

[1]dom解析 Document Object Model 官方推荐的标准
原理:把xml文件加载到内存当中,在内存中形成一个树形结构
优点:可以进行增删改查
缺点:容易内存泄漏
[2]sax解析 Simple Api For Xml 不是官方推荐的标准 是从一个程序员社区研究出来的
原理:一边解析 一边处理 一边释放内存 实际上就是一行一行的读
优点:不会内存泄漏
缺点:不能够对数据进行增删改
API Application programming Interface应用程序接口
[3]xmlPull解析 Android中内置的解析器 这个必须会
原理:类似sax
[4]3种解析方法 只有思想 并没有提供相应的api实现
sun公司提供了一套接口Jaxp Java API For Xml processing 实现dom和sax解析

dom解析

dom解析会把xml元素 属性 文本 都当成节点
[1]javax.xml.parsers [2]DocumentBuilder 使其从 XML 文档获取 DOM 文档实例。使用此类,应用程序员可以从 XML 获取一个 Document[3]DocumentBuilderFactory  使应用程序能够从 XML 文档获取生成 DOM 对象树的解析器[4]Document XML 文档步骤:[1]获取DocumentBuilderFactory 解析器工厂[2]获取DocumentBuilder 解析器[3]解析xml文件 获取Document 整个文档对象[4]获取xml里面的内容[5]获取节点里面每次个节点对象代码:// [1]获取DocumentBuilderFactory 解析器工厂DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();// [2]获取DocumentBuilder 解析器DocumentBuilder builder = factory.newDocumentBuilder();// [3]解析xml文件 获取Document 整个文档对象Document document = builder.parse("books.xml");// [4]获取xml里面的内容NodeList nodeList = document.getElementsByTagName("title");for (int i = 0; i < nodeList.getLength(); i++) {// [5]获取节点里面每次个节点对象Node node =  nodeList.item(i);System.out.println(node.getTextContent()+node.getNodeType()+node.getNodeName());
}

sax解析

步骤:[1]获取一个 SAXParserFactory 解析器工厂[2] 获取一个SAXParser 解析器[3]开始解析xml代码:// [1]获取一个 SAXParserFactory 解析器工厂SAXParserFactory factory = SAXParserFactory.newInstance();// [2] 获取一个SAXParser 解析器SAXParser parser = factory.newSAXParser();// [3]开始解析xmlparser.parse("books.xml", new DefaultHandler() {// 文档开始@Overridepublic void startDocument() throws SAXException {super.startDocument();System.out.println("startDocument");}// 元素开始@Overridepublic void startElement(String uri, String localName, String qName, Attributes attributes)throws SAXException {super.startElement(uri, localName, qName, attributes);System.out.println("startElement = " + qName);}// 文本内容@Overridepublic void characters(char[] ch, int start, int length) throws SAXException {super.characters(ch, start, length);System.out.println("characters = " + new String(ch, start, length));}// 元素结束@Overridepublic void endElement(String uri, String localName, String qName) throws SAXException {super.endElement(uri, localName, qName);System.out.println("endElement");}// 文档结束@Overridepublic void endDocument() throws SAXException {super.endDocument();System.out.println("endDocument");}});

xmlpull解析把数据封装到javaBean中

xmlPull解析 Android中内置的解析器 这个必须会
原理:类似sax与sax区别:sax强制解析所有,xmlPull解析可控,想解析哪个哪里就解析哪里事件类型:  public static final int START_DOCUMENT = 0;  public static final int END_DOCUMENT = 1;  public static final int START_TAG = 2;  public static final int END_TAG = 3;  public static final int TEXT = 4;步骤[1]获取一个 XmlPullParserFactory 解析工厂[2]获取一个 XmlPullParser[3]读取xml文档[4]获取事件类型5]解析器向下移动代码:// [1]获取一个 XmlPullParserFactory 解析工厂XmlPullParserFactory factory = XmlPullParserFactory.newInstance();// [2]获取一个 XmlPullParserXmlPullParser parser = factory.newPullParser();// [3]读取xml文档parser.setInput(new FileInputStream("books.xml"), "utf-8");// [4]获取事件类型int eventType = parser.getEventType();System.out.println(eventType);// [5]解析器向下移动eventType = parser.next();System.out.println(eventType);eventType = parser.next();System.out.println(eventType);eventType = parser.next();System.out.println(eventType);解析数据:while (eventType != XmlPullParser.END_DOCUMENT) {switch (eventType) {case XmlPullParser.START_TAG:if (parser.getName().equals("book")) {book = new Book();String id = parser.getAttributeValue(0);book.setId(id);}  else if (parser.getName().equals("title")) {book.setTitle(parser.nextText());} else if (parser.getName().equals("price")) {book.setPrice(parser.nextText());}break;case XmlPullParser.END_TAG:if (parser.getName().equals("book")) {books.add(book);}break;}eventType = parser.next();}

json介绍

简介:[1]JSON:JavaScript 对象表示法(JavaScript Object Notation)。[2]JSON 是存储和交换文本信息的语法。类似 XML。[3]JSON 比 XML 更小、更快,更易解析。[4]JSON 是轻量级的文本数据交换格式 [5]JSON 独立于语言 * [6]JSON 具有自我描述性,更易理解 {"name":"张三"}语法:[1]数据在名称和键值对中 名称和键值对在双引号中,名称后面写一个冒号,然后是值:{"name" : "张三"}等价于name = "张三"[2]数据由逗号分隔 [3]花括号保存对象 { "name":"张三" , "age":"18" }等价name = "张三"age = "18"[4]方括号保存数组 {"person": [{ "name":"张三" , "age":"18" },{ "name":"王五" , "age":"19" },{ "name":"李四" , "age":"20" }]}

json解析的实现

 
json解析 android内置
JSONObject =解析对象
JSONArray  =解析数组
代码:
    String json = "{'person': [{ 'name':'张三'  },{ 'name':'王五'  },{ 'name':'李四'  }]}";
    JSONObject object = new JSONObject(json);
    JSONArray person = (JSONArray) object.get("person");
    JSONObject i = (JSONObject) person.get(0);
    String name = (String) i.get("name");
    System.out.println(name);
    i = (JSONObject) person.get(1);
    name = (String) i.get("name");
    System.out.println(name);
    i = (JSONObject) person.get(2);
    name = (String) i.get("name");    System.out.println(name);

0 0
原创粉丝点击