Java解析XML文件

2021-06-11 16:04

阅读:628

标签: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如下:

A1
       A01
   A2
       A03
  A4
     A09
  

.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


评论


亲,登录后才可以留言!