1、JDOM解析

首先导入额外的jar包:

Build Path:jdom-2.0.6.jar

准备工做获取到子节点的集合:

package com.imooc_xml.jdom.text;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.List; import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder; public class JDOMTest { public static void main(String[] args) { // 1、创建一个SAXBuilder对象
SAXBuilder saxBuilder = new SAXBuilder();
InputStream in ;
try {
// 2、创建一个输入流,将xml文件加载到输入流中
in = new FileInputStream("xml/books.xml");
// 3、通过saxBuilder的build方法,将输入流加载到saxBuilder中
Document document = saxBuilder.build(in);
// 4、通过document对象获取xml文件的根节点
Element rootElement = document.getRootElement();
// 5、获取根节点下的子节点的list集合
List<Element> bookList = rootElement.getChildren(); } catch (FileNotFoundException e) {
e.printStackTrace();
}catch (JDOMException | IOException e) {
e.printStackTrace();
}
}
}

获取节点的属性名和属性值,节点名和值:

    for (Element book:bookList){
System.out.println("开始解析第"+(bookList.indexOf(book)+1)+"本书");
List<Attribute> attrList = book.getAttributes();
for (Attribute attr : attrList){
attr.getName();
attr.getValue();
}
//book.getAttributeValue("id"); List<Element> bookChildren = book.getChildren();
for(Element children : bookChildren){
children.getName();
children.getValue();
}
}

乱码的处理:

使用InputStreamReader()指定编码

在JDOM中存储Book对象

private static ArrayList<Book> bookList = new ArrayList<Book>();

//进行进一步解析
for (Element book:bookList){
Book bookEntity = new Book(); for (Attribute attr : attrList){
String attrName = attr.getName();
String attrValue = attr.getValue();
if(attrName.equals("id")){
bookEntity.setId(attrValue);
}
} for(Element children : bookChildren){
String name = children.getName();
String value = children.getValue();
if(name.equals("name")){
bookEntity.setName(value);
}else if(name.equals("author")){
bookEntity.setAuthor(value);
}else if(name.equals("year")){
bookEntity.setYear(value);
}else if(name.equals("price")){
bookEntity.setPrice(value);
}else if(name.equals("language")){
bookEntity.setLanguage(value);
}
}
JDOMTest.bookList.add(bookEntity);
bookEntity=null;

jar包随项目导入导出方法:

创建lib文件夹,复制jar包到此文件

build path添加jar包

2、DOM4J解析xml文件

导入jar包:

dom4j-1.6.1.jar

package com.imooc_xml.dom4j.test;

import java.io.File;
import java.util.Iterator;
import java.util.List; import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader; public class DOM4JTest { public static void main(String[] args) { SAXReader reader = new SAXReader();
try {
Document document = reader.read(new File("xml/books.xml"));
Element bookstore = document.getRootElement();
Iterator it = bookstore.elementIterator();
while (it.hasNext()) {
Element book = (Element) it.next();
List<Attribute> bookAttrs = book.attributes();
for(Attribute attr : bookAttrs){
attr.getName();
attr.getValue();
}
Iterator itt = book.elementIterator();
while (itt.hasNext()) {
Element bookChild = (Element) itt.next();
bookChild.getName();
bookChild.getStringValue();
}
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
}

四种解析方式的分析:

DOM:

。与平台无关的官方解析方式

*需要的内存性能要高一点

SAX:

。java平台提供的一种基于事件驱动的解析方式

*解析图解

每走一部触发不同的方法

JDOM、DOM4J:

。在DOM、SAX方法上扩展的,只有Java中能够使用的解析方法

*

性能测试:

build path-->add Library-->JUnit

@Test
public void testPerformance() throws Exception{
     long start = System.currentTimeMillis();
//测试方法的性能
long end = System.currentTimeMillis(); System.out.println(start-end);

java--xml文件读取(JDOM&DOM4J)的更多相关文章

  1. xml文件读取到数据库

    xml文件读取到数据库   第一步,导包 c3p0,dom4j,jaxen,MySQL-connector 第二步  xml文件,config文件 第三步 javabean 第四步 c3p0的工具类 ...

  2. php xml 文件读取 XMLReader

    php xml 文件读取 <?php /** $xmlString = '<xml> <persons count="10"> <person ...

  3. javascript读取xml文件读取节点数据的例子

    分享下用javascript读取xml文件读取节点数据方法. 读取的节点数据,还有一种情况是读取节点属性数据. <head> <title></title> < ...

  4. java实现xml文件读取并保存到对象

    首先浅聊一下解析xml的四种方式: 1.DOM方式:有缺点但是这个缺点却也是他的优点.下面详细介绍: 以树形的层次结构组织节点或信息片断集合,可以获得同一个文档中的多处不同数据.使用起来简单. 优点是 ...

  5. JAVA xml 流方式读取。数据挖掘大文件预处理。

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...

  6. java操作XML文件--读取内容

          先把问题贴出来:编写一个可以解析xml及修改xml内容的工具类       由于我以前做过Android应用程序开发,之前也解析过xml文件,所以,这道题不是很难,这篇文章我先解决第一个问 ...

  7. Java XML文件解析

    四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例) 蓝色字体内容由上一篇博文中补充进来的,写作风格比较好,大家有兴趣可以去查看原文 众所周知,现在解析XML的方法越来越多,但主流的方法也就四 ...

  8. XML文件操作之dom4j

    能够操作xml的api还是挺多的,DOM也是可以的,不过在此记录下dom4j的使用,感觉确实挺方便的 所需jar包官网地址:http://www.dom4j.org/dom4j-1.6.1/ dom4 ...

  9. XML文件解析之DOM4J解析

    1.DOM4J介绍 dom4j的官网是http://www.dom4j.org/dom4j-1.6.1/,最新的版本是1.6.1,根据官网介绍可知.dom4j是一个易用的.开源的库,应用于Java平台 ...

随机推荐

  1. Linux 安装json神器 jq

    wget -O jq https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64 chmod +x ./jq cp jq /u ...

  2. 精通 Android Data Binding

    转自:https://github.com/LyndonChin/MasteringAndroidDataBinding 官方虽然已经给出了教程 - Data Binding Guide (中文版 - ...

  3. 很全的php数组操作方法

    一.数组操作的基本函数 数组的键名和值 array_values($arr);获得数组的值 array_keys($arr);获得数组的键名 array_flip($arr);数组中的值与键名互换(如 ...

  4. C#:ref和out的联系及区别。

    总结以上四条得到ref和out使用时的区别是: ①:ref指定的参数在函数调用时候必须初始化,不能为空的引用.而out指定的参数在函数调用时候可以不初始化: ②:out指定的参数在进入函数时会清空自己 ...

  5. Centos命令行报bash:.....:command not found的解决办法

    命令行报bash:.....:command not found的解决办法(几乎所有命令)   命令行输入命令执行后报“bash:....:command not found”这是由于系统PATH设置 ...

  6. 查看apache,nginx,mysql,linux,php版本

    查看apache版本 /usr/sbin/apachectl -v httpd -v 安装目录,使用apachectl -v mysql版本查看 mysql -V 查看linux版本 1.cat /e ...

  7. ios 动画 创建一个UIImageView并将其属性设置animationImages为UIImages 的数组

    NSArray *animationFrames = [NSArray arrayWithObjects: [UIImage imageWithName:@"image1.png" ...

  8. docker安装并配置加速

    安装 旧版本的 Docker 称为 docker 或者 docker-engine,使用以下命令卸载旧版本: sudo apt-get remove docker \ docker-engine \ ...

  9. jQuery.callbacks 注释

    (function( jQuery ) { // String to Object flags format cache var flagsCache = {}; // Convert String- ...

  10. bash编程基础

    bash变量 变量命名: 1.不能使用程序中的关键字(保留字) 2.只能使用数字.字母和下划线,且不能以数字开头 3.要见名知义 变量类型: 数值型:精确数值(整数),近似数值(浮点型) 字符型:ch ...