码迷,mamicode.com
首页 > 编程语言 > 详细

Java解析XML文件

时间:2021-01-05 10:51:27      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:build   dem   except   static   图片   sub   col   png   date   

Java解析XML文件

XML是什么

  • XML是可扩展标记语言(EXtensible Markup Language)
  • XML是一种标记语言(HTML也是标记语言)
  • XML是用来传输和存储数据(HTML是用来显示数据)

XML的语法规则

  • 所以XML元素都必须有关闭标签
  • XML标签是对大小写敏感
  • XML必须正确的嵌套
  • 由于XML是树形结构,所以必须有根元素
  • XML属性值必须加引号

XML的应用场景

  • 作为系统或应用的配置文件使用
  • 作为应用程序的数据存储文件或日志存储文件
  • 数据库的功能之一,支持XML存储

Java解析XML的四种方法

Java解析分为两类四种方法。

第一类是基础方法:DOM解析和SAX解析

第二类是在基础方法上扩展出来的方法:JDOM解析和DOM4J解析

基础方法

DOM和SAX是两种解析方法(没有具体实现,只有接口),所有java自身提供了DomcumentBuilderFactory/DomcumentBuilder和SAXParserFactory/SAXParser实现这两个解析器(就是不需要添加额外的架包)

DOM解析

DOM(Document Object Model):文件对象模型,是W3C组织推荐的处理可扩展标志语言的标准编程接口。

DOM是与平台无关的官方解析方法。由W3C提供的接口,将整个XML文档读入,构建一个DOM树来对各个节点进行操作。

SAX解析

SAX(Simple API for XML):XML简单应用程序接口。

SAX是基于事件驱动的解析方法。是在读取文档时激活一系列事件,这些事件被推给事件处理器,然后由事件处理器提供对文档内容的访问。

SAX解析和DOM解析的对比

技术图片

扩展方法

由于JDOM和DOM4J是扩展方法,所以Java本身是没有的,需要添加相应的架包dom4j.jar和jdom.jar

JDOM解析

JDOM是处理XML的纯JAVA API,API大量使用了Collection类,JDOM是使用具体类而不使用接口。

DOM4J解析

DOM4J是目前xml解析方面最优秀的(就是目前主流的),它合并了很多基本XML文档表示的功能,包括集成的XPATH支持、XML Schema支持以及基于事件的处理。

.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<Root>
   <VALUE>
       <NO DATE="C005">A1</NO>
       <ADDR>A01</ADDR>
   </VALUE>
   <VALUE>
       <NO DATE="C004">A2</NO>
       <ADDR>A03</ADDR>
  </VALUE>
  <note>
    <NO DATE="C014">A4</NO>
     <ADDR>A09</ADDR>
  </note>
</Root>

.class解析如下:

import java.io.*;   
import java.util.*;
		//导入相应架包的API
import org.dom4j.*;
import org.dom4j.io.*;
public class DOM4Java 
{
   public static void main(String[] args)
   {
	   	// 解析demo.xml文件
		try { 
	     String path=DOM4Java.class.getClassLoader().getResource("").toString().substring(6);// 获得绝对路径 注意:我的xml是放在这个绝对路径上的
		 File f= new File(path+"demo.xml"); 
		 // 创建SAXReader的对象reader
		 SAXReader reader = new SAXReader(); 
		 // 通过reader对象的read方法加载books.xml文件,获取docuemnt对象。 
		 Document doc = reader.read(f); 
		 // 通过document对象获取根节点root
		 Element root = doc.getRootElement(); 
		 System.out.println(root.getName());
		 // 通过element对象的elementIterator方法获取迭代器
		 Iterator it = root.elementIterator("VALUE");//获取root下所有value 子标签
	     while(it.hasNext()) 
		  { 
			 Element foo = (Element) it.next(); //得到value
		     Element subfoo=foo.element("NO"); //获取value 下NO 子标签
		     System.out.print("车牌号码:" + foo.elementText("NO")+" 属性:"+subfoo.attributeValue("DATE")); 
		     System.out.println("城市编号:" + foo.elementText("ADDR")); 
		  }
	     	System.out.println("-----------------------------------");
	     	Element e=root.element("note");
	     	System.out.println(e.elementText("NO"));
	     
		  }catch (Exception e)
		  { 
		      e.printStackTrace(); 
		  } 
   }
}

结果如下:

Root
车牌号码:A1 属性:C005城市编号:A01
车牌号码:A2 属性:C004城市编号:A03
-----------------------------------
A4

Java解析XML文件

标签:build   dem   except   static   图片   sub   col   png   date   

原文地址:https://www.cnblogs.com/shenStudy/p/14219474.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!