`
实学实战
  • 浏览: 15693 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
文章分类
社区版块
存档分类
最新评论

Java四种读取和创建XML文档的例子教程

 
阅读更多

四种方法解析XML文档:Dom、SAX、JDOM、dom4j


1、了解XML

XML,即可扩展标记语言(ExtensibleMarkupLanguage),标准通用标记语言的子集,一种用于标记电子文件使其具有结构性的标记语言。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。它和JSON都是一种数据交换格式。


作用:解析XML文档,创建XML文档。


2、什么是可扩展标记语言?

·可扩展标记语言是一种很像超文本标记语言的标记语言。

·它的设计宗旨是传输数据,而不是显示数据。

·它的标签没有被预定义。您需要自行定义标签。

·它被设计为具有自我描述性。

·它是W3C的推荐标准。


3、解析XML文档的四种方式 四种方法解析XML文档:Dom、SAX、JDOM、dom4j


第一种:DOM的全称是DocumentObjectModel,也即文档对象模型。在应用程序中,基于DOMXML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树),应用程序正是通过对这个对象模型的操作,来实现对XML文档数据的操作。通过DOM接口,应用程序可以在任何时候访问XML文档中的任何一部分数据,因此,这种利用DOM接口的机制也被称作随机访问机制。


4.1、开始动手

第一种:DOMXML文件读取:——看注释

1.DocumentBuilderFactory.newInstance()创建DocumentBuilderFactory的对象

2.DocumentBuilder获得具体的DOM解析器。

3.Parse(newFile())获取文档xml路径。


4.1.1准备XML文档:这里我用的是languages.xml

<?xml version="1.0" encoding="UTF-8"?>
<Languages cat="it">
	<lan id="1">
		<name>Java</name>
		<ide>Eclipse</ide>
	</lan>
	<lan id="2">
		<name>Swift</name>
		<ide>Xcode</ide>
	</lan>
	<lan id="3">
		<name>C#</name>
		<ide>Visual Studio</ide>
	</lan>
</Languages>

4.1.2看看DOM解析的例子

package dom;
import java.io.File;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

/*
 * DOM  Class  Reader
 * 
 */
public class ReaderXML {
	public static void main(String[] args) {
		try {
			
			//1。获取DOM 解析器的工厂实例。
			DocumentBuilderFactory factory  = DocumentBuilderFactory.newInstance();
			//2。获得具体的DOM解析器。
			DocumentBuilder builder = factory.newDocumentBuilder();
			
			//3。获取文件
			Document document = builder.parse(new File("languages.xml"));

                       //4。获取根元素
			Element root = document.getDocumentElement();
			System.out.println("cat="+root.getAttribute("cat"));
			//5。获取根节点[有多个节点]
			NodeList list = root.getElementsByTagName("lan");
			
			for (int i = 0; i < list.getLength(); i++) {
				//Node lan = list.item(i);
				//System.out.println("id="+lan.getNodeType());
				System.out.println("---------------");
			    Element lan =  (Element) list.item(i);
			    System.out.println("id=" + lan.getAttribute("id"));
			    
				//获取子节点集合
				NodeList clist = lan.getChildNodes();
				for (int j = 0; j < clist.getLength(); j++) {
					//获取下标
					Node c = clist.item(j);
					//把空格删除[获取属性名和值]
					if (c instanceof Element) {
						System.out.println(c.getNodeName()+"="+c.getTextContent());
					}
				}
			}
								
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}


4.2第一种:DOMXML文件创建

1.DocumentBuilderFactory.newInstance()获取DOM解析器的工厂实例。

2.DocumentBuilder获得具体的DOM解析器。

3.创建一个xml文档,获得Document对象(根结点)createElement

4.创建根元素、根结点、setAttribute("根结点名");

5.添加根节点的值:setTextContent(“Value”);

6.子节点添加到根节点:appendChild(“根结点”);

7.输出:TransformerFactory!

package dom;

import java.io.File;
import java.io.StringWriter;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;



/*
 * DOM Class Great
 * 
 */
public class Creat_XML {
  public static void main(String [] ags){
	  
	 try {
		 
	 DocumentBuilderFactory factory =  DocumentBuilderFactory.newInstance();
	 DocumentBuilder builder = factory.newDocumentBuilder();
		 
         Document document = builder.newDocument();	
	 //创建属性名、赋值
         Element root = document.createElement("Languages");
         root.setAttribute("cat", "it");

                //创建第一个根节点、赋值
		 Element lan = document.createElement("lan");
		 lan.setAttribute("id", "1");
		 Element name = document.createElement("name");
		 name.setTextContent("java");
		 Element ide = document.createElement("IDE");
		 ide.setTextContent("Eclipse");
		 lan.appendChild(name);
		 lan.appendChild(ide);
		 <span style="font-size:14px;"></span><pre name="code" class="java">                 //创建第二个根节点、赋值
		 Element lan2 = document.createElement("lan");
		 lan2.setAttribute("id", "2");
		 Element name2 = document.createElement("name");
		 name2.setTextContent("Swift");
		 Element ide2 = document.createElement("ide");
		 ide2.setTextContent("XCode");
		 lan2.appendChild(name2);
		 lan2.appendChild(ide2);
		 
                 //添加到属性中、
		 root.appendChild(lan);
                 root.appendChild(lan2);	
                 document.appendChild(root);
		 
                //定义了用于处理转换指令,以及执行从源到结果的转换的
		TransformerFactory transformerFactory = TransformerFactory.newInstance();
		Transformer transformer = transformerFactory.newTransformer();
		transformer.setOutputProperty("encoding", "UTF-8");
			
		StringWriter writer = new StringWriter();
		transformer.transform(new DOMSource(document), new StreamResult(writer));
		System.out.println(writer.toString());
			
		transformer.transform(new DOMSource(document), new StreamResult(new File("newxml.xml")));   
		
		
		
		
		
	} catch (ParserConfigurationException | TransformerException e) {
		e.printStackTrace();
	}
  }
}


第二种:dom4j是一个JavaXMLAPI,类似于jdom,用来读写XML文件的dom4j是一个十分优秀的JavaXMLAPI,具有性能优异、功能强大和极其易使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在IBMdeveloperWorks上面还可以找到一篇文章,对主流的JavaXMLAPI进行的性能、功能和易用性的评测,所以可以知道dom4j无论在哪个方面都是非常出色的。如今可以看到越来越多的Java软件都在使用dom4j来读写XML特别值得一提的是连SunJAXM也在用dom4j。这已经是必须使用的jar包,Hibernate也用它来读写配置文件。

下载:dom4j架包!

第二种:Dom4j创建XML步骤:

1.设置根节点:DocumentHelper.createElement("根节点名");

2.读取doucment元素:DocumentHelper.createDocument(root);

3.添加根节点:addAttribute("name","value");

4.添加字节点、赋值:addElement("name");setText("value");

5.添加到根节点:XMLWriterxmlWriter=newXMLWriter();xmlWriter.write(document);

package dom4j;

import java.io.FileOutputStream;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;


public class Greate_dom4j {
	    public static void main(String[] args) throws Exception  
	    {  
	        // 创建文档并设置文档的根元素节点 
	        Element root = DocumentHelper.createElement("books");
	        Document doucment = DocumentHelper.createDocument(root);
	        //根节点
	        root.addAttribute("name","bookvalue");
	        //子节点
	        Element element1 = root.addElement("author1 ");
	        element1.addAttribute( "name", "James1" );
	        element1.addAttribute( "location1", "UK1" );
	        element1.addText( "James Strachan1" );
	        
	        Element element = root.addElement("author2 ");
	        element.addAttribute( "name", "chen" );
	        element.addAttribute( "kenken", "ZK" );
	        element.addText( "chen kenken" );
	        //添加
	        XMLWriter xmlwriter2 = new XMLWriter();
	        xmlwriter2.write(doucment);
	        //创建文件
	        OutputFormat format = new OutputFormat();

	        FileOutputStream file = new FileOutputStream("books.xml");
	        XMLWriter xml = new XMLWriter(file);
	        
	        xml.close();
	    }

		
	}  


第二种:Dom4j读取XML步骤:

1.获取SAM接口:SAXReadersaxReader=newSAXReader();

2.获取XML文档:Documentdoc=saxReader.read(newFile("name.xml"));

3.获取根节点:Elementroot=doc.getRootElement();

4.获取子节点:root.elementIterator();

5.获取孙节点:attributeIterator();


package dom4j;
import java.io.File;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;


/*
 * dom4j Class Reader
 * 
 */

public class Rreader_dom4j{
	public static void main(String[] args) throws Exception{
		
		//1.获取SAM接口:
		SAXReader saxReader = new SAXReader();
		//2.获取XML文件:
		Document doc = saxReader.read(new File("newxml.xml"));
		//3.获取根节点:
		Element root = doc.getRootElement();		
		System.out.println("根节点: " + root.getName());		
		
		System.out.println("----------------");
		
		//获取子节点
		Iterator<?> it = root.elementIterator();
		while(it.hasNext()){
			Element elem = (Element) it.next();
			//获取属性名属性值
			List<Attribute> li = elem.attributes();
			for (Attribute att : li ) {
				System.out.println(att.getName() + "  " + att.getValue() );
			}
					
			//获取子节的子节点
			Iterator<?> ite = elem.elementIterator();
			while(ite.hasNext()){
				Element child = (Element) ite.next();
				System.out.println(child.getName() + "  " + child.getStringValue());
			}
			
			System.out.println("----------------");
		}

		
	}
}



第三种:JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作。JDOM直接为JAVA编程服务。它利用更为强有力的JAVA语言的诸多特性(方法重载、集合概念等),把SAXDOM的功能有效地结合起来。

JDOM是用Java语言读、写、操作XML的新API函数。在直接、简单和高效的前提下,这些API函数被最大限度的优化。


3.1、JDOM读取XML:

package com.jdom;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;
import org.jdom2.Attribute;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;


/**
 * JDOM Class Reader
 * 
 */
public class ReaderJDom {
	public static void main(String[] args) {
	
		try {
			
			//1.创建一个SAXBuilder的对象
		    SAXBuilder saxBuilder = new SAXBuilder();
			//2.创建一个输入流,将xml文件加载到输入流中
			InputStream in = new FileInputStream("Book.xml");			
			InputStreamReader isr = new InputStreamReader(in, "UTF-8");	
			//3.通过saxBuilder的build方法,将输入流加载到saxBuilder中
			Document document = saxBuilder.build(isr);			 
			//4.通过document对象获取xml文件的根节点
			Element rootElement = document.getRootElement();
			//5.获取根节点下的子节点的List集合
			List<Element> elementList = rootElement.getChildren();
			
			for (Element element : elementList) {
				// 解析文件的属性集合
				List<Attribute> list = element.getAttributes();
				for (Attribute attr : list) {
					// 获取属性名
					String attrName = attr.getName();
					// 获取属性值
					String attrValue = attr.getValue();
					System.out.println(attrName +"="+ attrValue);
					
					// 对book节点的子节点的节点名以及节点值的遍历
					List<Element> listChild = element.getChildren();
					for (Element child : listChild) {
						System.out.println(child.getName() +"="+child.getValue());
				    }	
					
				}
				System.out.println("——————————————————————");
			}
			
		
		    }catch (FileNotFoundException e) {
					e.printStackTrace();
			}catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}catch (JDOMException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
	}
}


3.2、JDOM创建xml:

package com.jdom;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;

/**
 * Create Class
 * 
 */
public class CreateJDom {
	public static void main(String[] args) {
		
		//1.生成一个根节点
		Element rss = new Element("Languages");
		//2.为节点添加属性
		rss.setAttribute("Cat","it");
		//3.生成一个document对象
		Document document = new Document(rss);
		
		//添加元素
		Element lan = new Element("lan");
		lan.setAttribute("id","1");
		Element name = new Element("name");
		name.setText("java");
		lan.addContent(name);
		
		Element IDE = new Element("IDE");
		IDE.setText("eclipse");
		lan.addContent(IDE);
		rss.addContent(lan);
		
		//添加元素
		Element lan2 = new Element("lan");
		lan2.setAttribute("id","1");
		Element name2 = new Element("name");
		name2.setText("C#");
		lan.addContent(name2);
		
		Element IDE2 = new Element("IDE");
		IDE2.setText("Visual Studio");
		lan2.addContent(IDE2);
		rss.addContent(lan2);

		
		//格式   换行、编码
		Format format = Format.getCompactFormat();
		format.setIndent("");  
		format.setEncoding("GBK");
		
		//4.创建XMLOutputter的对象
		XMLOutputter outputer = new XMLOutputter(format);
		try {
			
			//5.利用outputer将document对象转换成xml文档
			outputer.output(document, new FileOutputStream(new File("Booknews.xml")));
				
							
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
}






第四种:SAX的全称是SimpleAPIsforXML,也即XML简单应用程序接口。DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式。当使用SAX分析器对XML文档进行分析时,会触发一系列事件,并激活相应的事件处理函数,应用程序通过这些事件处理函数实现对XML文档的访问,因而SAX接口也被称作事件驱动接口。


由于本人能力有限、还有SAX有点麻烦、所以不再这里给你们显示了;




分享到:
评论

相关推荐

    java读取xml文件生成文件

    Java语言在处理XML文件时,提供了丰富的API和库,使得我们可以轻松地读取、解析、修改和生成XML文档。在给定的场景中,我们主要关注如何使用Java来读取XML文件并根据需求生成新的文件。以下是关于这个主题的详细说明...

    用java读取txt文件和xml文件

    Java提供了`javax.xml.parsers`包,包含`DocumentBuilderFactory`和`DocumentBuilder`类,它们用于解析XML文件并创建一个DOM(文档对象模型)表示。以下是一个基本示例: ```java import javax.xml.parsers....

    java读取xml文件

    为了读取XML文件,开发者通常会利用Java API或第三方库。本篇将详细介绍如何在Java中读取XML文件,以及如何利用第三方库增强XML处理能力。 首先,Java标准库JDK提供了一个内置的API——javax.xml.parsers包,它包含...

    使用Pull解析器读取XML文件和生成XML文件

    总的来说,使用Pull解析器读取和生成XML文件是一种高效且灵活的方法,尤其适合处理大型XML文档。通过掌握这一技术,开发者可以更好地处理XML数据,提高程序的性能和稳定性。在进行XML操作时,还需注意数据的正确性和...

    java读取 配置 xml文件

    本篇文章将深入探讨如何在Java中读取XML配置文件,以及如何实现一个简易版的Spring框架。 首先,我们需要导入Java的DOM(Document Object Model)库,它提供了处理XML文档的标准API。在Java中,我们通常使用`javax....

    java xml.java操作XML文档

    在Java中,我们可以通过一系列的API来读取、写入、解析和操作XML文档。这些API包括DOM(Document Object Model)、SAX(Simple API for XML)和StAX(Streaming API for XML)。 1. DOM API: 这种方法将整个XML文档...

    java 创建和读取PDF例子

    在Java编程环境中,创建和读取PDF文档是常见的任务,特别是在处理报告、发票或文档自动化时。PDF(Portable Document Format)是一种广泛使用的文件格式,它能够保持文档的原始布局和格式,无论在哪种设备上查看。...

    java读取配置文件xml ,properties,txt

    在Java中,我们可以使用DOM(Document Object Model)、SAX(Simple API for XML)或StAX(Streaming API for XML)等解析器来读取XML文件。这里提供的`ExecuteXmlUtil.java`文件可能包含了使用DOM解析器的示例代码...

    java读取xml文件demo

    java实现的一个读取本地xml文件的例子,进入正题: 需要的包jdom2-2.0.6.jar:下载地址,http://mvnrepository.com/artifact/org.jdom/jdom2 此例子比较简单

    用java来实现xml的例子.rar_XML java_xml

    学习和理解这些示例,可以帮助我们更好地掌握Java处理XML的能力,包括读取XML文件,查找特定元素,修改元素内容,添加新节点,以及生成新的XML文件等。同时,对于XML的了解也包括理解其基本语法,比如元素、属性、...

    java读取XML文件内容小程序

    在这个特定的“java读取XML文件内容小程序”中,使用的是XAM(可能是指JAXB,Java Architecture for XML Binding)解析器,它是一种基于Java注解的XML绑定技术,可以将XML数据自动映射到Java对象,反之亦然。...

    excel文档解析和生成xml文件

    本主题将详细探讨如何使用Java的Apache POI库读取Excel文件,并利用JDOM库生成XML文件。 首先,Apache POI是一个开源项目,专门用于处理Microsoft Office格式的文件,包括Excel(.xlsx和.xls)。在Java中,我们可以...

    java解析xml例子

    DOM(Document Object Model)解析器是Java中的一种常用方法,它将整个XML文档加载到内存中,形成一个树形结构。以下是一个简单的DOM解析XML的例子: ```java import javax.xml.parsers.DocumentBuilderFactory; ...

    Java用DOM4J读取XML

    ### Java使用DOM4J读取XML知识点解析 #### 一、概述 在Java开发中,处理XML文件是一项常见的任务。DOM4J是一个简单且功能强大的Java库,用于处理XML文档。它提供了类似于DOM的API,但更为轻量级且易于使用。本篇将...

    java 解析、生成 Excel XML 四个实例

    在Java编程中,处理Excel和XML文件是常见...总之,Java解析和生成Excel与XML的能力是开发中的重要技能,广泛应用于数据交换、报表生成和自动化测试等领域。通过实践以上四个实例,开发者能够更好地理解和掌握这些技术。

    JAVA读取.删除.修改XML文档

    下面是一个简单的例子,展示了如何使用DOM4J库读取XML文档中的特定节点: ```java import java.io.File; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class ...

    java 读取,操作 xml

    在Java编程中,处理XML是常见的任务,涉及到读取XML文档、修改XML内容、解析XML元素等操作。本篇文章将深入探讨如何使用Java来读取和操作XML文件。 1. **Java解析XML的库** Java提供了多种解析XML的API,包括DOM...

    java读取XML内容源代码

    以上四种方法都是Java中读取XML文件的常见途径,每种方法有其适用的场景和优缺点。在实际开发中,应根据项目需求选择合适的方法。如果你的项目中包含名为"FlashDemo"的文件或资源,可能涉及到与XML文件交互的示例...

    在java环境下读取xml文件

    本文将详细介绍在Java中读取XML文件的五种主要方法:DOM、SAX、JDOM、JAXB和dom4j,其中特别关注最常用且易用的dom4j库。 1. DOM(Document Object Model): DOM是W3C推荐的一种解析XML的标准方法,它将整个XML...

    java解析xml文件的例子(三中方式的都有,很全)

    DOM是一种将整个XML文件加载到内存中的解析方法,创建一个树形结构来表示XML文档。这种方式便于遍历和修改XML文档,但对大型文件可能内存消耗较大。 - 使用Java内置的`javax.xml.parsers.DocumentBuilderFactory`和...

Global site tag (gtag.js) - Google Analytics