xml文件
<?xml version="1.0" encoding="utf-8" ?>
<class><student><firstname>cxx1</firstname><lastname>Bob1</lastname><nickname>stars1</nickname><marks>85</marks></student><student rollno="493"><firstname>cxx2</firstname><lastname>Bob2</lastname><nickname>stars2</nickname><marks>85</marks></student><student rollno="593"><firstname>cxx3</firstname><lastname>Bob3</lastname><nickname>stars3</nickname><marks>85</marks></student>
</class>
1.DOM方式
package com.cxx.xml;import org.w3c.dom.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
/*** @Author: cxx* Dom操作xml* @Date: 2018/5/29 20:19*/
public class DomDemo {//用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) {//1.创建DocumentBuilderFactory对象DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//2.创建DocumentBuilder对象try {DocumentBuilder builder = factory.newDocumentBuilder();Document d = builder.parse("src/main/resources/demo.xml");NodeList sList = d.getElementsByTagName("student");//element(sList);node(sList);} catch (Exception e) {e.printStackTrace();}}
}
结果截图
2.SAX方式
package com.cxx.xml;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;/*** @Author: cxx* SAX解析DOM* 一行一行 Handler* startElement* endElement* @Date: 2018/5/29 20:03*/
public class SaxDemo {public static void main(String[] args) throws Exception {//1.或去SAXParserFactory实例SAXParserFactory factory = SAXParserFactory.newInstance();//2.获取SAXparser实例SAXParser saxParser = factory.newSAXParser();//创建Handel对象SAXDemoHandel handel = new SAXDemoHandel();saxParser.parse("src/main/resources/demo.xml",handel);}
}class SAXDemoHandel extends DefaultHandler {//遍历xml文件开始标签@Overridepublic void startDocument() throws SAXException {super.startDocument();System.out.println("sax解析开始");}//遍历xml文件结束标签@Overridepublic void endDocument() throws SAXException {super.endDocument();System.out.println("sax解析结束");}@Overridepublic void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {super.startElement(uri, localName, qName, attributes);if (qName.equals("student")){System.out.println("============开始遍历student=============");//System.out.println(attributes.getValue("rollno"));}else if (!qName.equals("student")&&!qName.equals("class")){System.out.print("节点名称:"+qName+"----");}}@Overridepublic void endElement(String uri, String localName, String qName) throws SAXException {super.endElement(uri, localName, qName);if (qName.equals("student")){System.out.println(qName+"遍历结束");System.out.println("============结束遍历student=============");}}@Overridepublic void characters(char[] ch, int start, int length) throws SAXException {super.characters(ch, start, length);String value = new String(ch,start,length).trim();if (!value.equals("")) {System.out.println(value);}}
}
结果截图
3.JDOM方式
<!--jdom -->
<dependency><groupId>org.jdom</groupId><artifactId>jdom</artifactId><version>1.1.3</version>
</dependency>
package com.cxx.xml;
import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.List;
/*** @Author: cxx* JDom解析xml* 快速开发XML应用程序。* 是一个开源项目* JDOM主要用来弥补DOM和SAX在实际应用当中的不足。* @Date: 2018/5/30 11:44*/
public class JDomDemo {public static void main(String[] args) throws Exception {//1.创建SAXBuilder对象SAXBuilder saxBuilder = new SAXBuilder();//2.创建输入流InputStream is = new FileInputStream(new File("src/main/resources/demo.xml"));//3.将输入流加载到build中Document document = saxBuilder.build(is);//4.获取根节点Element rootElement = document.getRootElement();//5.获取子节点List<Element> children = rootElement.getChildren();for (Element child : children) {System.out.println("通过rollno获取属性值:"+child.getAttribute("rollno"));List<Attribute> attributes = child.getAttributes();//打印属性for (Attribute attr : attributes) {System.out.println(attr.getName()+":"+attr.getValue());}List<Element> childrenList = child.getChildren();System.out.println("======获取子节点-start======");for (Element o : childrenList) {System.out.println("节点名:"+o.getName()+"---"+"节点值:"+o.getValue());}System.out.println("======获取子节点-end======");}}
}
结果截图
4.DOM4J方式
<!-- dom4j --><dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.6.1</version>
</dependency>
package com.cxx.xml;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import java.io.File;
import java.util.Iterator;
import java.util.List;/*** @Author: cxx* Dom4j解析xml* @Date: 2018/5/30 12:21*/
public class Dom4JDemo {public static void main(String[] args) throws Exception {//1.创建Reader对象SAXReader reader = new SAXReader();//2.加载xmlDocument document = reader.read(new File("src/main/resources/demo.xml"));//3.获取根节点Element rootElement = document.getRootElement();Iterator iterator = rootElement.elementIterator();while (iterator.hasNext()){Element stu = (Element) iterator.next();List<Attribute> attributes = stu.attributes();System.out.println("======获取属性值======");for (Attribute attribute : attributes) {System.out.println(attribute.getValue());}System.out.println("======遍历子节点======");Iterator iterator1 = stu.elementIterator();while (iterator1.hasNext()){Element stuChild = (Element) iterator1.next();System.out.println("节点名:"+stuChild.getName()+"---节点值:"+stuChild.getStringValue());}}}
}
总结