解析XML文本
一、DOM(Document Object Model)
1.介绍
a.基于XML文档树结构的解析;
b.适用于多次访问的XML文档;
c.特点:比较消耗资源。
代码示例:
xml文件:
<?xml version="1.0" encoding="utf-8"?> <!-- 引号中的URL内容用来唯一标识命名空间,不能重复 --> <students> <student id="1"> <name>stu1</name> <sex>男</sex> <age>21</age> <height>180</height> <class><![CDATA["元素<title>和</title>的使用"]]></class> </student> <student id="2"> <name>stu2</name> <sex>女</sex> <age>19</age> <height>170</height> <class><![CDATA["元素<body>和</body>的使用"]]></class> </student> <student id="3"> <name>stu3</name> <sex>男</sex> <age>20</age> <height>180</height> <class><![CDATA["元素<span>和</span>的使用"]]></class> </student> <student id="4"> <name>stu3</name> <sex>男</sex> <age>20</age> <height>180</height> <class><![CDATA["其他元素的使用"]]></class> </student> </students>
解析代码:
package com.yh.xml; import java.io.IOException; 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; public class ParseXMLDemo { public static void main(String[] args) { // TODO Auto-generated method stub DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("D:/eclipseWJ/HelloWorld/src/com/yh/xml/Demo2.xml"); NodeList stus = document.getElementsByTagName("student"); for (int i = 0; i < stus.getLength(); i++) { Node nodeStu = stus.item(i); Element eleStu = (Element) nodeStu; String stuId = eleStu.getAttribute("id"); System.out.println(stuId + "号"); NodeList attrs = eleStu.getChildNodes(); for (int j = 0; j < attrs.getLength(); j++) { Node nodeAttr = attrs.item(j); if (nodeAttr.getNodeType() == Node.ELEMENT_NODE && nodeAttr.getNodeName() == "name") { // 判断当前节点是否为元素节点 Element eleAttr = (Element) nodeAttr; String attrName = eleAttr.getTextContent(); System.out.println(attrName); } } } } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
二、SAX
1.介绍
a.基于事件的解析;
b.适用于大数据量的XML文档;
c.特点:占用资源少,内存消耗小。
三、DOM4J
1.介绍
a.非常优秀的Java XML API;
b.性能优异,功能强大;
c.开放源代码。