将XML文档中的内容转换为JAVA对象共有4中方式它,它们分别是DOM,SAX,DOM4J , JDOM。接下来我用代码演示JAVA官方提供我们的两种方式DOM和SAX。

DOM是JDK自带的接下来我来演示一下怎样获取XML文本中的内容。以下是xml文件中的内容。

张三

12

李四

16

我们通过DOM的方式来获取来获取xml文件中的内容。

public class DOMDemo01 {

private static DocumentBuilderFactory documentBuilderFactory ;

private static DocumentBuilder documentBuilder;

private static Document document;

public static void main(String[] args) {

documentBuilderFactory = DocumentBuilderFactory.newInstance();

try {

documentBuilder = documentBuilderFactory.newDocumentBuilder();

} catch (ParserConfigurationException e) {

e.printStackTrace();

}

try {

document = documentBuilder.parse("src/main/resources/xml/student.xml");

} catch (SAXException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

NodeList parents = document.getElementsByTagName("student");

System.out.println("一共有"+parents.getLength()+"个节点");

for(int i=0;i

Element students = (Element) parents.item(i);

//获取父标签中的值

String id = students.getAttribute("id");

String stuid = students.getAttribute("stuid");

System.out.println("id : "+id+" stuid : "+stuid);

//获取子标签

NodeList childs = students.getChildNodes();

//DOM将空白和文件也看作为节点 // System.out.println(childs.getLength());

//打印student节点的所有标签

for(int j=0;j

//获取除文本节点和空格节点

if(childs.item(j).getNodeType() == Node.ELEMENT_NODE){

Student student = new Student();

System.out.print(childs.item(j).getNodeName() + " : ");

//通过childs.item(j).getTextContent()也可以获取节点内容

System.out.println(childs.item(j).getFirstChild().getNodeValue());

}

}

}

}

}

以下是输出的内容

image.png

SAX解析XML文件

import org.xml.sax.SAXException;

import javax.xml.parsers.ParserConfigurationException;

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;

import java.io.IOException;

public class SAXDemo {

public static void main(String[] args) {

SAXParserFactory factory = SAXParserFactory.newInstance();

try {

SAXParser parser = factory.newSAXParser();

SAXHandle saxHandle = new SAXHandle();

parser.parse("src/main/resources/xml/student.xml",saxHandle);

} catch (ParserConfigurationException e) {

e.printStackTrace();

} catch (SAXException e) {

e.printStackTrace();

}catch (IOException e){

e.printStackTrace();

}

}

}

import org.xml.sax.Attributes;

import org.xml.sax.SAXException;

import org.xml.sax.helpers.DefaultHandler;

public class SAXHandle extends DefaultHandler {

/*

* 用来表示解析的开始

*/

@Override

public void startDocument () throws SAXException {

super.startDocument();

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

}

@Override

public void endDocument () throws SAXException {

super.startDocument();

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

}

@Override

public void startElement (String uri, String localName, String qName,

Attributes attributes) throws SAXException {

super.startElement(uri,localName,qName,attributes);

if(qName.equals("student") ){

int length = attributes.getLength();

for(int i=0;i

System.out.print(attributes.getQName(i)+" : ");

System.out.print(attributes.getValue(i)+" ");

}

System.out.println();

}else if(!qName.equals("student")){

System.out.print("节点名 : "+qName +" ");

}

}

/*

* 用来表示解析的结束

*/

@Override

public void endElement (String uri, String localName, String qName)

throws SAXException {

super.endElement(uri,localName,qName);

}

@Override

public void characters (char ch[], int start, int length)

throws SAXException {

String value = new String(ch,start,length);

//去掉换行和空制符

if(!value.trim().equals("")){

System.out.println(value);

}

}

}

运行结果

image.png

总结:DOM解析将文件的内容全部加载在内存中并且形成一个DOM树,如果XML非常大,则DOM很浪费时间。SAX是基于事件的解析,会一步一步的判断每一行的XML文件中的内容,执行开始标签触发startDocument()方法,每走到结束标签都会触发一个endDocument方法。执行完最后标签会执行endDocument方法。

DOM

优点:形成DOM树,实现简单。

缺点: 当XML文件非常大时,对内存消耗比较大,容易影响解析,容易造成内存溢出。

SAX

优点:采用事件的驱动模式,不需要关系赋值节点,按行进行解析。

缺点:不易编码。

xml 转 java_XML转换为JAVA相关推荐

  1. XStream将XML转换为JAVA对象快速指南

    XStream是一套简单实用的JAVA类库,它用于序列化对象和XML对象之间互相转换.由于XStream配置简单,灵活易用,因此在XML对象和JAVA对象序列化市场上有很大的空间.本文并不会对XStr ...

  2. java xslt 数据转换_如何将xslt结果转换为Java对象?

    我有一个 XML文件: Empire Burlesque Bob Dylan USA Columbia 10.90 1985 而这个XSL文件: 现在我想将结果转换为Java类. Java的: @Xm ...

  3. 使用JAXB将XML Schema绑定到Java类

    http://blog.csdn.net/zsyspace/article/details/1786079 Java Architecture for XML Binding (JAXB) 是一项可以 ...

  4. 现代化历险记:策略+将COBOL转换为Java的示例

    在Keyhole Software,我们在很大程度上是一家现代化公司. 我们拥有一些顾问,他们专门研究将旧的代码迁移到新的,翻新的残旧代码库,并为大多数已经被供应商锁定的企业设计更光明的未来. 作为这 ...

  5. java 序列化成xml文件_将Java对象序列化成JSON和XML格式

    1.先定义一个Java对象Person: public class Person { String name; int age; int number; public String getName() ...

  6. DOM4J 不兼容的类型: JAVA.UTIL.LIST (ORG.DOM4J.NODE)无法转换为JAVA.UTIL.LIST(ORG.DOM4J.ELEMENT)

    为了解决Dom4j解析xml出现非法反射异常的问题,方法见 Illegal reflective access by org.dom4j.io.SAXContentHandler ,使用Dom4j解析 ...

  7. 将符合ISO 8601的字符串转换为java.util.Date

    我正在尝试将ISO 8601格式的String转换为java.util.Date . 如果与区域设置(比较示例)一起使用,我发现模式yyyy-MM-dd'T'HH:mm:ssZ符合ISO8601. 但 ...

  8. saxon 使用_Java XML和JSON:Java SE的文档处理,第1部分:SAXON和Jackson

    saxon 使用 XML和JSON对我来说很重要,我感谢Apress让我写了一整本有关它们的书. 在本文中,我将简要介绍新书的第二版Java XML和JSON . 如果有足够的空间,我还将展示两个有用 ...

  9. cobol和java_现代化历险:策略+将COBOL转换为Java的示例

    cobol和java 在Keyhole Software,我们在很大程度上是一家现代化公司. 我们有一些顾问,专门研究将旧的代码迁移到新的,翻新的残旧代码库,并为大多数已经被供应商锁定的企业设计更光明 ...

最新文章

  1. JavaScript修饰器-让代码更干净
  2. SSRS:使用SQL2008教程学习Reporting Services之数据库AdventureWorks2008问题_学习笔记1
  3. SpringSecruity整合Oauth2 详解(一)
  4. elasticsearch 基本配置
  5. 关于windows xp sp2/sp3 中tcpip.sys对于Raw socket的限制
  6. python unittest生成html报告_python unittest--HTMLTestRunner生成报告
  7. CGRect包含交错,边缘,中心的检测
  8. 遍历QListWidget的item
  9. java spin lock_JAVA 各种锁机制
  10. Redis学习之路(二)之Redis入门基础
  11. 卷积神经网络的基本原理
  12. 计算机培训通知,关于开展上海师范大学2018年计算机办公自动化免费培训的通知...
  13. excel财务案例建模_Pro Excel财务建模:技术创业公司的构建模型
  14. nod-1483-化学变换
  15. 网站被黑提醒该站点可能受到黑客攻击,部分页面已被非法篡改...
  16. IDEA 项目启动报错 Shorten the command line via JAR manifest or via a classpath file and rerun.
  17. Android使用SurfaceView开发《捉小猪》小游戏 (一)
  18. 超越联系人跟踪应用程序
  19. 《资管新规》深度解读
  20. 最新golang语言面试题总结(一)

热门文章

  1. CSS display属性--笔记
  2. springboot2.0 默认数据连接池HikariPool(java平台最快的,替换druid)性能对比
  3. 【好程序员特训营】Java异常处理
  4. BeanCopier的简单使用
  5. freenas部署,文件共享,流媒体搭建
  6. C语言编程的按位或返回值,c语言的按位运算符怎么操作!?
  7. 超详细的 MySQL 学习教程(多实例、附练习、视频讲解持续更新)
  8. 近期开发工作的一点心得体会
  9. 三百以内什么蓝牙耳机比较好?300以内最好的蓝牙耳机推荐
  10. SQL Server 存储过程 迪杰斯特拉算法 大规模 表格存储 不是矩阵