XML解析
来源:互联网 发布:淘宝直通车协议 编辑:程序博客网 时间:2023/12/07 22:33
XML解析主要有三种方式:
1.DOM解析
2.Dom4j解析
3.SAX解析
下面我来一一用代码写一遍:
XML文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student sid="1" sname="hug">
<sage>140</sage>
<ssex>男</ssex>
</student>
<student sid="2" sname="hug2">
<sage>120</sage>
<ssex>男</ssex>
</student>
</students>
1.DOM解析
package com.zking.test;
import Java.io.File;
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;
/**
* 使用DOM解析XML
* @author Administrator
*
*/
public class TestParseXMLByDOM {
public static void main(String[] args) {
try {
//1.实实例化DocumentBuilderFactory
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
//2.通过dbf获取DocumentBuilder
DocumentBuilder db=dbf.newDocumentBuilder();
//3.解析
Document document=db.parse(new File("students.xml"));
//4.获取跟节点<students>
Element students=document.getDocumentElement();
//5.获取所有的<student>节点
NodeList nodeList=students.getElementsByTagName("student");
for (int i = 0; i < nodeList.getLength(); i++) {
//node element
Element student=(Element) nodeList.item(i);
//获取属性
String sid=student.getAttribute("sid");
String sname=student.getAttribute("sname");
//获取<student>下面的<sage><ssex>
Element elementSage=(Element) student.getElementsByTagName("sage").item(0);
Element elementSsex=(Element) student.getElementsByTagName("ssex").item(0);
String sage=elementSage.getTextContent();
String ssex=elementSsex.getTextContent();
System.out.println(sid+" "+sname+" "+sage+" "+ssex);
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2.Dom4j解析
使用Dom4j时先需要下载jar包,下载地址 http://www.dom4j.org/dom4j-1.6.1/
package com.zking.test;
import java.io.File;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
/**
* 使用dom4j解析XML
* @author Administrator
*
*/
public class TestParseXMLByDom4j {
public static void main(String[] args) {
try {
SAXReader saxReader=new SAXReader();
Document document=saxReader.read(new File("students.xml"));
Element root=document.getRootElement();
List<Element> student=root.elements("student");
for (Element element : student) {
String sid=element.attributeValue("sid");
String sname=element.attributeValue("sname");
//拿到子标签
Element elementSage=element.element("sage");
Element elementSsex=element.element("ssex");
//根据拿到的子标签拿值
String sage=elementSage.getTextTrim();
String ssex=elementSsex.getTextTrim();
System.out.println(sid+" "+sname+" "+sage+" "+ssex);
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
3.SAX解析
package com.zking.test;
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.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
* 使用SAX解析XML
* @author Administrator
*
*/
public class TestParseXMLBySAX {
public static void main(String[] args) {
try {
//1.实例化SAXParserFactory
SAXParserFactory spf=SAXParserFactory.newInstance();
//2.通过spf获取SAXParser
SAXParser saxParser=spf.newSAXParser();
//3.开始解析
saxParser.parse(new File("students.xml"), new DefaultHandler(){ //在DefaultHandler重写characters、endElement、startElement方法
String currentTagName=null;
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
super.characters(ch, start, length);
if("sage".equals(currentTagName)){
String sage=new String(ch, start, length);
System.out.println(sage);
}else if("ssex".equals(currentTagName)){
String ssex=new String(ch, start, length);
System.out.println(ssex);
}
}
@Override
public void endElement(String uri, String localName,
String qName) throws SAXException {
super.endElement(uri, localName, qName);
currentTagName=null;
}
@Override
public void startElement(String uri, String localName,
String qName, Attributes attributes)
throws SAXException {
super.startElement(uri, localName, qName, attributes);
currentTagName=qName;
if("student".equals(qName)){
String sid=attributes.getValue(0);
String sname=attributes.getValue(1);
System.out.println(sid+" "+sname);
}
}
});
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
DOM解析和SAX解析的区别:
1.DOM解析占用内存比较大,但是方便对XML进行CURD
2.SAX解析有限占用内存小,解析速度快,缺点只适合做文档读取
SAX解析多用于Android开发XML解析
- XML解析
- xml解析
- XML解析
- 解析XML
- xml解析
- 解析xml
- 解析xml
- xml解析
- XML解析
- xml解析
- XML解析
- xml解析
- xml解析
- xml解析
- xml解析
- xml解析
- 解析xml
- XML解析
- 数据库连接池
- 读 Zepto 源码之集合元素查找
- <fmt:formatNumber>标签
- github的简单使用及创建网页的方法
- 简书短篇小说专栏爬取
- XML解析
- 关于推箱子的总结
- USACO-Section1.4 Mother's Milk
- JavaScript —— six
- 实习
- 28335 中断系统
- vfork
- 第2章 在 HTML 中使用 JavaScript 关于页面文档模式
- XML约束