Java解析XML的四种方式

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文件开始标签

@Override

public void startDocument() throws SAXException {

super.startDocument();

System.out.println("sax解析开始");

}

//遍历xml文件结束标签

@Override

public void endDocument() throws SAXException {

super.endDocument();

System.out.println("sax解析结束");

}

@Override

public 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+"----");

}

}

@Override

public 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=============");

}

}

@Override

public 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.加载xml

Document 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());

}

}

}

}

总结

到此这篇关于Java解析XML的四种方式的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。

以上是 Java解析XML的四种方式 的全部内容, 来源链接: utcz.com/p/251632.html

回到顶部