XML四种解析方法
本猿在学习过程中,学到的四种xml解析方法。解析xml是理解和编写框架的重要基础知识之一,故在这里分享给大家。
xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<country>
<province value="广东省">
<city>广州</city>、
<city>佛山</city>
<city>茂名</city>
</province>
</country>
DOM解析
直接调用jdk中原生的类和方法
步骤:
1、创建SAXBuilder对象
2、创建输入流
3、builder中载入文件流,加载文档
4、获取根节点
5、获取子节点
package com.wdt.tools.xml.test;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class XmlReaderByDom {
//用Element方式
public static void element(NodeList list){
for (int i = 0; i <list.getLength() ; i++) {
Element element = (Element) list.item(i);
NodeList childNodes = element.getChildNodes();
for (int j = 0; j <childNodes.getLength() ; j++) {
if (childNodes.item(j).getNodeType()==Node.ELEMENT_NODE) {
//获取节点
System.out.print(childNodes.item(j).getNodeName() + ":");
//获取节点值
System.out.println(
childNodes.item(j).getFirstChild().getNodeValue());
}
}
}
}
public static void node(NodeList list){
for (int i = 0; i <list.getLength() ; i++) {
Node node = list.item(i);
NodeList childNodes = node.getChildNodes();
for (int j = 0; j <childNodes.getLength() ; j++) {
if (childNodes.item(j).getNodeType()==Node.ELEMENT_NODE) {
System.out.print(childNodes.item(j).getNodeName() +":");
System.out.println(
childNodes.item(j).getFirstChild().getNodeValue());
}
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//1.创建DocumentBuilderFactory对象
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
//2.创建DocumentBuilder对象
try {
DocumentBuilder builder = factory.newDocumentBuilder();
Document d = builder.parse("src/com/wdt/tools/xml/template/city.xml");
NodeList sList = d.getElementsByTagName("province");
//element(sList);
node(sList);
} catch (Exception e) {
e.printStackTrace();
}
}
}
SAX方式
直接调用jdk中原生的类和方法
步骤:
1、获去SAXParserFactory实例
2、获取SAXParser实例
3、创建handle
4、解析xml文档
package com.wdt.tools.xml.test;
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;
public class XmlReaderBySax {
public static void main(String[] args) throws Exception{
//1.获去SAXParserFactory实例
SAXParserFactory factory = SAXParserFactory.newInstance();
//2.获去SAXParser实例
SAXParser parser = factory.newSAXParser();
//3.创建handler
SaxHandler handler = new SaxHandler();
parser.parse("src/com/wdt/tools/xml/template/city.xml", handler);
}
}
class SaxHandler extends DefaultHandler{
//遍历xml文件开始标签
@Override
public void startDocument() throws SAXException {
super.startDocument();
System.out.println("sax解析开始");
}
//遍历xml文件结束标签
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
System.out.println("sax解析结束");
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
super.startElement(uri, localName, qName, attributes);
if (qName.equals("province")){
System.out.println("省份【"+attributes.getValue("value")+"】");
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
// TODO Auto-generated method stub
super.endElement(uri, localName, qName);
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
// TODO Auto-generated method stub
super.characters(ch, start, length);
String value = new String(ch,start,length).trim();
if (!value.equals("")) {
System.out.println(" "+value);
}
}
}
JDOM方式
注:jdom 解析xml需要引入第三方包,jdom-1.1.3.jar
步骤:
1、创建SAXBuilder对象
2、创建输入流
3、builder中载入文件流,加载文档
4、获取根节点
5、获取子节点
package com.wdt.tools.xml.test;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.List;
import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
public class XmlReaderByJDom {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
SAXBuilder builder = new SAXBuilder();
InputStream in = new FileInputStream("src/com/wdt/tools/xml/template/city.xml");
Document document = builder.build(in);
Element rootElement = document.getRootElement();
List<Element> provincElements = rootElement.getChildren();
for (Element province : provincElements) {
List<Attribute> attributes = province.getAttributes();
for (Attribute attr : attributes) {
System.out.println("省份【"+attr.getValue()+"】");
}
List<Element> cityElements = province.getChildren();
for (Element city : cityElements) {
System.out.println(" "+city.getValue());
}
}
}
}
DOM4J
注:dom4j解析xml需要引入第三方jar包,dom4j-1.6.1.jar
步骤:
1、创建SAXReader对象
2、加载xml文档
3、获取根节点
package com.wdt.tools.xml.test;
import java.io.File;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class XmlReaderByDom4j {
public static void main(String[] args) throws Exception{
//创建reader
SAXReader reader = new SAXReader();
//加载XML文件
Document document = reader.read(new File("src/com/wdt/tools/xml/template/city.xml"));
//获取根节点
Element rootElement = document.getRootElement();
Iterator<Element> iterator = rootElement.elementIterator();
while (iterator.hasNext()) {
Element province = iterator.next();
List<Attribute> list = province.attributes();
for (Attribute attribute : list) {
System.out.println("省份【"+attribute.getValue()+"】");
}
Iterator<Element> childrenIterator = province.elementIterator();
while (childrenIterator.hasNext()) {
Element city = childrenIterator.next();
System.out.println(" "+city.getStringValue());
}
}
}
}