Java xml解析(DOM、SAX)
来源:互联网 发布:java反射的作用 编辑:程序博客网 时间:2024/05/16 17:06
test.mxl
<?xml version="1.0" encoding="UTF-8"?><books> <book id="12"> <name>thinking in java</name> <price>85.5</price> </book> <book id="15"> <name>Spring in Action</name> <price>39.0</price> </book></books>
封装成一个对象
package com.hz;/** * 封装book对象 * * @author ztw * * 2016-12-20 */public class Book { private String id; private String name; private double price; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((id == null) ? 0 : id.hashCode()); result = prime * result + ((name == null) ? 0 : name.hashCode()); long temp; temp = Double.doubleToLongBits(price); result = prime * result + (int) (temp ^ (temp >>> 32)); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Book other = (Book) obj; if (id == null) { if (other.id != null) return false; } else if (!id.equals(other.id)) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; if (Double.doubleToLongBits(price) != Double .doubleToLongBits(other.price)) return false; return true; } @Override public String toString() { return "Book [id=" + id + ", name=" + name + ", price=" + price + "]\n"; }}
三步曲走起:
1、创建解析器工厂
2、新建解析器
3、使用解析器解析文档,获取文档对象
DOM解析
package com.hz.dom;import java.io.IOException;import java.util.ArrayList;import java.util.List;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;import com.hz.Book;/** * DOM解析 * * @author ztw * * 2016-12-20 */public class DOMParse { public static List<Book> Parse(String fileName){ List<Book> result = new ArrayList<Book>(); //1、创建解析器工厂 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try { //2、新建解析器 DocumentBuilder builder = dbf.newDocumentBuilder(); //3、使用解析器解析文档,获取文档对象 Document document = builder.parse(fileName); //目标是解析book对象 //包含node的容器List<Book> NodeList nodeList = document.getElementsByTagName("book"); //获取到的长度 int count = nodeList.getLength(); for (int i = 0; i < count; i++) { Book book = new Book(); //获取到nodeList中的每一个node节点 //强制转换成元素节点 Element elementsNode = (Element) nodeList.item(i); //获取id属性 String id = elementsNode.getAttribute("id"); book.setId(id); //获取当前elementsNode的子节点 NodeList childNodesList = elementsNode.getChildNodes(); int size = childNodesList.getLength(); for (int j = 0; j < size; j++) { //这里的node有两种节点 文本节点 元素节点 Node childNode = childNodesList.item(j); if(childNode.getNodeType() == Node.ELEMENT_NODE){ Element childElementsNode = (Element) childNode; if("name".equals(childElementsNode.getTagName())){ String name = childElementsNode.getFirstChild().getNodeValue(); book.setName(name); }else if("price".equals(childElementsNode.getTagName())){ String priceStr = childElementsNode.getFirstChild().getNodeValue(); try { book.setPrice(Double.valueOf(priceStr)); } catch (NumberFormatException e) { e.printStackTrace(); } } } } result.add(book); } } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return result; }}
SAX解析
逐行解析
package com.hz.sax;import java.io.File;import java.io.IOException;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.SAXException;/** * SAX解析 * * @author ztw * * 2016-12-20 */public class SaxParse { public static void parse(String fileName){ //1 创建解析工厂 SAXParserFactory spf = SAXParserFactory.newInstance(); try { //创建解析器 SAXParser parse = spf.newSAXParser(); parse.parse(new File(fileName), new MyDefaultHandler()); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}
package com.hz.sax;import java.util.ArrayList;import java.util.List;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;import com.hz.Book;/** * 重写DefaultHandler中的方法 * * @author ztw * * 2016-12-20 */public class MyDefaultHandler extends DefaultHandler { private List<Book> bookList; private Book book; private String tag; /** * 在文档解析开始之前调用 */ @Override public void startDocument() throws SAXException { super.startDocument(); bookList = new ArrayList<Book>(); } /** * 标签的开始 */ @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { super.startElement(uri, localName, qName, attributes); tag = qName; if("book".equals(qName)){ book = new Book(); String id = attributes.getValue("id"); book.setId(id); } } /** * 对文本的解析 */ @Override public void characters(char[] ch, int start, int length) throws SAXException { super.characters(ch, start, length); String str = new String(ch, start, length); if(tag.equals("name")){ book.setName(str); }else if(tag.equals("price")){ try { book.setPrice(Double.valueOf(str)); } catch (NumberFormatException e) { e.printStackTrace(); } } } /** * 标签的结束 */ @Override public void endElement(String uri, String localName, String qName) throws SAXException { super.endElement(uri, localName, qName); if(qName.equals("book")){ bookList.add(book); } tag = ""; } /** * 在文档解析结束之后调用 */ @Override public void endDocument() throws SAXException { super.endDocument(); System.out.println(bookList); }}
0 0
- Java xml解析(DOM、SAX)
- Java 解析XML文档(DOM & SAX)
- java dom、sax解析XML
- java dom、sax解析xml
- java 解析XML文件(DOM & SAX)(一)
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
- Struts2+Spring4+Hibernate4整合系列--(四)StepByStep4
- js查询数组是否有重复数据
- 如何使用vue-cli生成项目
- sql server 什么是全外连接,左外连接,右外连接,它们的区别又是什么?
- Python 开发环境搭建与helloWorld 测试
- Java xml解析(DOM、SAX)
- 深入理解Java:注解(Annotation)自定义注解入门
- WCF发布到IIS
- 【LeetCode-477】Total Hamming Distance
- Android-System类
- Installing Spark Guid (1)
- 操作系统精髓与设计原理-进程描述和控制
- 在Java中对mysql数据库插入datetime类型数据
- 今日开始写博客,一个礼拜最少两篇