java 解析中文xml_java如何解析XML

202c1b2c9841b938d6f9c22f303ca6d4.png

DOM方式解析XML

Dom解析是将xml文件全部载入到内存,组装成一颗dom树,然后通过节点以及节点之间的关系来解析xml文件,与平台无关,java提供的一种基础的解析XML文件的API,理解较简单,但是由于整个文档都需要载入内存,不适用于文档较大时。 (推荐学习:java课程)

SAX方式解析XML

基于事件驱动,逐条解析,适用于只处理xml数据,不易编码,而且很难同时访问同一个文档中的多处不同数据

JDOM方式解析XML

简化与XML的交互并且比使用DOM实现更快,仅使用具体类而不使用接口因此简化了API,并且易于使用

DOM4j方式解析XML

JDOM的一种智能分支,功能较强大,建议熟练使用

xml文件<?xml version="1.0" encoding="utf-8" ?>

cxx1

Bob1

stars1

85

cxx2

Bob2

stars2

85

cxx3

Bob3

stars3

85

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

Element element = (Element) list.item(i);

NodeList childNodes = element.getChildNodes();

for (int j = 0; 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

Node node = list.item(i);

NodeList childNodes = node.getChildNodes();

for (int j = 0; 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();

}

}

}

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

}

}

}

JDOM方式

org.jdom

jdom

1.1.3

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

}

}

}

DOM4J方式

dom4j

dom4j

1.6.1

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

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值