解析XML数据
在 Java 程序中读取 XML 文件的过程称为解析 XML
解析 XML 文件的方式
1) DOM 解析 (java 官方提供)
2) SAX 解析(java 官方提供)
3) JDOM 解析(第三方提供)
4) DOM4J 解析(第三方提供)
DOM 解析 XML 的步骤
1) 创建一个 DocumentBuilderFactory 的对象 Document文档 Factory工厂
2) 创建一个 DocumentBuilder 对象
3) 通过DocumentBuilder的parse(...)方法得到Document对象
4) 通过 getElementsByTagName(...)方法获取到节点的列表
5) 通过 for 循环遍历每一个节点
6) 得到每个节点的属性和属性值
7) 得到每个节点的节点名和节点值
1 import java.io.IOException; 2 3 import javax.xml.parsers.DocumentBuilder; 4 import javax.xml.parsers.DocumentBuilderFactory; 5 import javax.xml.parsers.ParserConfigurationException; 6 7 import org.w3c.dom.Document; 8 import org.w3c.dom.NamedNodeMap; 9 import org.w3c.dom.Node; 10 import org.w3c.dom.NodeList; 11 import org.xml.sax.SAXException; 12 13 public class TestDOMParse { 14 public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { 15 // 1) 创建一个DocumentBuilderFactory的对象 16 DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); 17 // 2) 创建一个DocumentBuilder对象 18 DocumentBuilder db=dbf.newDocumentBuilder(); 19 // 3) 通过DocumentBuilder的parse(...)方法得到Document对象 20 Document doc=db.parse("book.xml"); 21 // 4) 通过getElementsByTagName(...)方法获取到节点的列表 22 NodeList bookList=doc.getElementsByTagName("book");//有2个book节点 23 //System.out.println(bookList.getLength()); 24 // 5) 通过for循环遍历每一个节点 25 for(int i=0;i<bookList.getLength();i++){ 26 //6) 得到每个节点的属性和属性值 27 Node book=bookList.item(i); 28 NamedNodeMap attrs=book.getAttributes(); //得到了属性的集合 29 //循环遍历每一个属性 30 for(int j=0;j<attrs.getLength();j++){ 31 //得到每一个属性 32 Node id=attrs.item(j); 33 System.out.println("属性的名称:"+id.getNodeName()+" "+id.getNodeValue()); 34 } 35 } 36 System.out.println(" 每个节点的名和节点的值"); 37 // 7) 得到每个节点的节点名和节点值 38 for(int i=0;i<bookList.getLength();i++){ 39 //得到每一个book节点 40 Node book=bookList.item(i); 41 NodeList subNode=book.getChildNodes(); 42 System.out.println("子节点的个数:"+subNode.getLength()); 43 //使用for循环遍历每一book的子节点 44 for(int j=0;j<subNode.getLength();j++){ 45 Node childNode=subNode.item(j); 46 //System.out.println(childNode.getNodeName()); 47 short type=childNode.getNodeType(); //获取节点的类型 48 if(type==Node.ELEMENT_NODE){ 49 System.out.println("节点的名称:"+childNode.getNodeName()+" "+childNode.getTextContent()); 50 } 51 52 } 53 } 54 55 } 56 }
------------------------------------------------------------------------------------------------------------------------------------------------------
SAX 方式解析 XML 数据
SAX 的概述
SAX,全称 Simple API for XML,是一种以事件驱动的XMl API,SAX 与 DOM 不同的是它边扫描边解析,自顶向下依次解析,由于边扫描边解析,
所以它解析 XML 具有速度快,占用内存少的优点
SAX 解析 XML 的步骤
1) 创建 SAXParserFactory 的对象
2) 创建 SAXParser 对象 (解析器)
3) 创建一个 DefaultHandler 的子类
4) 调用 parse 方法
1 import java.io.IOException; 2 3 import javax.xml.parsers.ParserConfigurationException; 4 import javax.xml.parsers.SAXParser; 5 import javax.xml.parsers.SAXParserFactory; 6 7 import org.xml.sax.SAXException; 8 9 public class TestSAXParse { 10 public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { 11 //1) 创建SAXParserFactory的对象 12 SAXParserFactory spf=SAXParserFactory.newInstance(); 13 //2) 创建SAXParser对象 (解析器) 14 SAXParser parser=spf.newSAXParser(); 15 //3) 创建一个DefaultHandler的子类 16 BookDeaultHandler bdh=new BookDeaultHandler(); 17 //4) 调用parse方法 18 parser.parse("book.xml", bdh); 19 } 20 }