博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
四种方法带你解析xml文件和xml字符串
阅读量:3960 次
发布时间:2019-05-24

本文共 9042 字,大约阅读时间需要 30 分钟。

第一种:Dom4j解析

优点

1.是JDom的一种智能分支,它合并了很多超出基本XML文档表示的功能。
2.Dom4j使用接口和抽象基本类方法,是一个优秀的Java XML API。
3.具有性能优异,灵活性好,功能强大和极端易使用的特点。
4.开放源代码。
添加maven

dom4j
dom4j
1.6.1

(1)解析xml文件 准备解析数据(测试的时候,注意文件放置的位置)

Gaoj
male
27

解析demo

package com.test.xml;import org.dom4j.*;import org.dom4j.io.SAXReader;import java.io.File;import java.util.Iterator;import java.util.List;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
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()); } } }}

(2)解析xml类型的字符串 。解析数据在程序中给出。

package com.test.xml;import org.dom4j.*;import org.dom4j.io.SAXReader;import java.io.File;import java.util.Iterator;import java.util.List;public class Dom4JDemo {    public static void main(String[] args) throws Exception {        //1.创建Reader对象        SAXReader reader = new SAXReader();        //2.加载xml        Document document  = null;        try {            document  = DocumentHelper.parseText("
cxx1
Bob1
stars1
85
"); } catch (DocumentException e) { e.printStackTrace(); } //3.获取根节点 Element rootElement = document.getRootElement(); Iterator iterator = rootElement.elementIterator(); while (iterator.hasNext()){ Element stu = (Element) iterator.next(); List
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()); } } }}

第二种:Dom解析

优点

1.形成了树结构,直观方便理解,代码更容易编写。
2.解析过程中树结构保留在内存中,方便修改。
缺点
1.当xml文件较大时,对内存消耗比较大,容易影响解析性能并造成内存溢出。
(1)解析xml文件 准备解析数据(测试的时候,注意文件放置的位置)

Gaoj
male
27

解析demo

package com.test.xml;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;public class DomDemo {    //用Element方式    public static void element(NodeList list){        for (int i = 0; i 

第三种:JDom解析

优点

1.仅使用具体类而不使用接口。
2.API大量使用了Collections类。
添加maven

org.jdom
jdom
1.1.3

**(1)解析xml文件 ** 准备解析数据(测试的时候,注意文件放置的位置)

Gaoj
male
27

解析demo

package com.test.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;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
children = rootElement.getChildren(); for (Element child : children) { System.out.println("通过rollno获取属性值:"+child.getAttribute("rollno")); List
attributes = child.getAttributes(); //打印属性 for (Attribute attr : attributes) { System.out.println(attr.getName()+":"+attr.getValue()); } List
childrenList = child.getChildren(); System.out.println("======获取子节点-start======"); for (Element o : childrenList) { System.out.println("节点名:"+o.getName()+"---"+"节点值:"+o.getValue()); } System.out.println("======获取子节点-end======"); } }}

**(2) 解析xml类型的字符串 测试数据在程序中给出

package com.test.xml;import org.dom4j.DocumentException;import org.dom4j.DocumentHelper;import org.jdom.Attribute;import org.jdom.Document;import org.jdom.Element;import org.jdom.input.SAXBuilder;import java.io.*;import java.util.List;public class JDomDemo {    public static void main(String[] args) throws Exception {        //1.创建SAXBuilder对象        SAXBuilder saxBuilder = new SAXBuilder();        java.io.Reader in = new StringReader("
cxx1
Bob1
stars1
85
"); Document document = (new SAXBuilder()).build(in); //4.获取根节点 Element rootElement = document.getRootElement(); //5.获取子节点 List
children = rootElement.getChildren(); for (Element child : children) { System.out.println("通过rollno获取属性值:"+child.getAttribute("rollno")); List
attributes = child.getAttributes(); //打印属性 for (Attribute attr : attributes) { System.out.println(attr.getName()+":"+attr.getValue()); } List
childrenList = child.getChildren(); System.out.println("======获取子节点-start======"); for (Element o : childrenList) { System.out.println("节点名:"+o.getName()+"---"+"节点值:"+o.getValue()); } System.out.println("======获取子节点-end======"); } }}

第四种:Sax解析

优点

1.采用事件驱动模式,对内存消耗比较小。
2.适用于只处理xml中数据时。
缺点
1.不易编码。
2.很难同时访问同一个xml中的多处不同数据。
(1)解析xml文件 准备解析数据(测试的时候,注意文件放置的位置)

Gaoj
male
27

解析demo

package com.test.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;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);        }    }}

转载地址:http://qnmzi.baihongyu.com/

你可能感兴趣的文章
JAVA注解引发的思考
查看>>
//基于redisTemplate工具类RedisHelper
查看>>
SpringBoot+RabbitMQ
查看>>
写博意味着什么
查看>>
一些时间管理法则和我自己的时间管理法则
查看>>
变量的声明和作用域——VB
查看>>
VB总结
查看>>
静态数组的声明与例子练习
查看>>
动态数组的声明与例子练习
查看>>
The Road Not Taken
查看>>
VB全局对象
查看>>
比较Cint() , int() , fix() ,round()的区别
查看>>
举例说明常用字符串处理函数
查看>>
用Mindmanager整理的VB常用函数
查看>>
随风潜入夜,润物细无声
查看>>
软件生存期模型
查看>>
制定计划(问题的定义,可行性研究)
查看>>
需求分析
查看>>
软件设计
查看>>
程序编码
查看>>