`
uule
  • 浏览: 6351725 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

JDOM、DOM4j读取XML文件(SAXReader)

    博客分类:
  • XML
阅读更多
<students>  
    <student age="25"><!--如果没有age属性,默认的为20-->  
        <name>崔卫兵</name>  
        <college>PC学院</college>  
        <telephone>62354666</telephone>  
        <notes>男,1982年生,硕士,现就读于北京邮电大学</notes> 
    </student>  
    <student age="26">  
        <name>cwb</name>  
        <college leader="学院领导">PC学院</college><!--如果没有leader属性,默认的为leader--> 
        <telephone>62358888</telephone>  
        <notes>男,1987年生,硕士,现就读于中国农业大学</notes>  
    </student> 
</students> 

JDOM读取:

	    SAXBuilder builder = new SAXBuilder();  
            org.jdom.Document doc = builder.build(new File("F:/xmltest.xml"));  
            Element foo = doc.getRootElement();  
            List allChildren = foo.getChildren();  
            for (int i = 0; i < allChildren.size(); i++) {  
                System.out.println( ((Element) allChildren.get(i)).getChild("name").getText());  
                System.out.println("((Element) allChildren.get(i)).getChild("space").getText());   
	}

 DOM4J读取XML:

 

public void testRead() throws DocumentException, FileNotFoundException{
		SAXReader reader=new SAXReader();

		Document doc=reader.read("D:/myeclipseWorkspace/Struts/src/test.xml");
		Element root =doc.getRootElement();
		for(Iterator it=root.elementIterator();it.hasNext();){
			Element element=(Element)it.next();

			System.out.println(element.attribute("age").getName()+" == "+element.attribute("age").getValue());
			System.out.println(element.attributeValue("age"));
			System.out.println(element.getName());
			for(Iterator itt=element.elementIterator();itt.hasNext();){
				//System.out.println(element.attributeValue("age"));
				Element el=(Element)itt.next();
				System.out.println(el.getName()+"=="+el.getText());  
				//getText()获取的是两个标签间的数据如"<name>崔卫兵</name>"中的崔卫兵
				//getName()获取的是标签名,即“<student age="25"><name>崔卫兵</name>”中的age和name
				//attributeValue("age")可获取age的值即25
			}
			System.out.println("==================");			
		}
	}

  结果:

 

age == 25
25
student
name==崔卫兵
college==PC学院
telephone==62354666
notes==男,1982年生,硕士,现就读于北京邮电大学
==================
age == 26
26
student
name==cwb
college==PC学院
telephone==62358888
notes==男,1987年生,硕士,现就读于中国农业大学
==================
age == 45
45
student
name==xxxxx
college==xxx学院
telephone==66666666
notes==注视中,注释中
==================
age == 12
12
student
name==lxx
college==yyyy学院
telephone==88888888
notes==注视中111,注释中222
==================

DOM读取XML:

XML文件:

<?xml version="1.0" encoding="gb2312"?>
<books>
<book attr="T001" id="idd1">
     <name>第一本书</name>
     <price>$14.09</price>
</book>
<book attr="T002" id="idd2">
     <name>第二本书</name>
     <price>$19.89</price>
</book>
<book attr="T003" id="idd3">
     <name>第三本书</name>
     <price>$26.00</price>
</book>
</books>

 读取:

public void parserXml2(String fileName) {
		DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance();
		try {
			DocumentBuilder dombuilder = domfac.newDocumentBuilder();
			// 方法1
			Document doc = dombuilder.parse(fileName);
			/*
			 * 方法2 InputStream is = new FileInputStream("F:\\ABC.xml"); Document
			 * doc = dombuilder.parse(is);
			 */

			/*
			 * 方法三如果要解析字符串result=
			 * "<?xml version=\"1.0\" encoding=\"gb2312\"?><books><book attribute=\"T001\"><name>第一本书</name><price>$14.09& lt;/price></book><book attribute=\"T002\"><name>第二本书</name><price>$19.89& lt;/price></book><book attribute=\"T003\"><name>第三本书</name><price>$26.00& lt;/price></book></books>"
			 * ;就用此方法 StringReader rd = new StringReader(result); InputSource is
			 * = new InputSource(rd); Document doc=dombuilder.parse(is);
			 */
			Element root = doc.getDocumentElement();
			NodeList books = root.getChildNodes();
			if (books != null) {
				for (int i = 0; i < books.getLength(); i++) {
					Node book = books.item(i);
					if (book.getNodeType() == Node.ELEMENT_NODE) {
						String attr = book.getAttributes().getNamedItem("attr").getNodeValue();
						String id = book.getAttributes().getNamedItem("id").getNodeValue();
						System.out.print(attr+" "+ id);

						for (Node node = book.getFirstChild(); node != null; node = node
								.getNextSibling()) {
							if (node.getNodeType() == Node.ELEMENT_NODE) {
								if (node.getNodeName().equals("name")) {
									String name = node.getNodeValue();
									String name1 = node.getFirstChild().getNodeValue();
									System.out.print(" " + name);
									System.out.print(" " + name1);
								}
								if (node.getNodeName().equals("price")) {
									String price = node.getFirstChild().getNodeValue();
									System.out.println(" " + price);
								}
							}
						}
					}
				}
			}
		} catch (ParserConfigurationException e) {
		} catch (FileNotFoundException e) {
		} catch (SAXException e) {
		} catch (IOException e) {
		}
	}

该实例参考:http://www.360doc.com/content/07/1213/14/13829_891246.shtml

 

二、创建XML

DOM4J创建XML:

/**
	 * 创建XML
	 * @throws Exception
	 */
	public void testWrite() throws Exception{

		Document document = DocumentHelper.createDocument();
		Element root = document.addElement("root");  //根节点
		for(int i=0;i<10;i++){
		Element element1 = root.addElement("user")
								.addAttribute("name","Alex"+i)
								.addAttribute("id", "id"+i)
								.addText("我是信息");
		
		}
		XMLWriter writer = new XMLWriter(new FileOutputStream("D:/myeclipseWorkspace/Struts/src/output.xml"));
		writer.write(document);
		writer.close();
	}

 输出方法2:

XMLOutputter XMLOut = new XMLOutputter();
File filePath = new File("D:/temp");
if (!filePath.exists()) {
   filePath.mkdirs();
}
System.out.println("filePath==========="+filePath);			
XMLOut.output(doc, new FileOutputStream(filePath + "/areaPie.xml"));
 

结果:

 

<?xml version="1.0" encoding="UTF-8"?>

<root>

<user name="Alex0" id="id0">我是信息</user>

<user name="Alex1" id="id1">我是信息</user>

<user name="Alex2" id="id2">我是信息</user>

<user name="Alex3" id="id3">我是信息</user>

<user name="Alex4" id="id4">我是信息</user>

<user name="Alex5" id="id5">我是信息</user>

<user name="Alex6" id="id6">我是信息</user>

<user name="Alex7" id="id7">我是信息</user>

<user name="Alex8" id="id8">我是信息</user>

<user name="Alex9" id="id9">我是信息</user>

</root>

 

JDOM创建XML:

import java.io.FileOutputStream;   
 import java.io.IOException;   
 import org.jdom.Document;   
 import org.jdom.Element;   
 import org.jdom.JDOMException;   
 import org.jdom.output.XMLOutputter;   
     
 public class Java2XML {   
     
     public void BuildXMLDoc() throws IOException, JDOMException {   
     
        // 创建根节点 list;   
         Element root = new Element("list");   
           
        // 根节点添加到文档中;   
         Document Doc = new Document(root);   
     
        // 此处 for 循环可替换成 遍历 数据库表的结果集操作;   
        for (int i = 0; i < 5; i++) {   
               
            // 创建节点 user;   
            Element elements = new Element("user");   
               
            // 给 user 节点添加属性 id;   
            elements.setAttribute("id", "" + i);   
               
            // 给 user 节点添加子节点并赋值;   
            // new Element("name")中的 "name" 替换成表中相应字段,setText("xuehui")中 "xuehui 替换成表中记录值;   
            elements.addContent(new Element("name").setText("xuehui"));  
            elements.addContent(new Element("age").setText("28"));  
            elements.addContent(new Element("sex").setText("Male"));  
    
            // 给父节点list添加user子节点;  
            root.addContent(elements);  
    
        }  
         XMLOutputter XMLOut = new XMLOutputter();  
          
        // 输出 user.xml 文件;  
         XMLOut.output(Doc, new FileOutputStream("user.xml"));  
     }  
    
     public static void main(String[] args) {  
        try {  
            Java2XML j2x = new Java2XML();  
            System.out.println("生成 mxl 文件...");  
            j2x.BuildXMLDoc();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
     }  
    
 }      
    
 生成的 user.xml  文件  
    
 <?xml version="1.0" encoding="UTF-8"?>  
 <list>  
     <user id="0">  
         <name>xuehui</name>  
         <age>28</age>  
         <sex>Male</sex>  
     </user>  
     <user id="1">  
         <name>xuehui</name>  
         <age>28</age>  
         <sex>Male</sex>  
     </user>  
     <user id="2">  
         <name>xuehui</name>  
         <age>28</age>  
         <sex>Male</sex>  
     </user>  
     <user id="3">  
         <name>xuehui</name>  
         <age>28</age>  
         <sex>Male</sex>  
     </user>  
     <user id="4">   
         <name>xuehui</name>   
         <age>28</age>   
         <sex>Male</sex>   
     </user>   
 </list>   

 该例子来源:http://zc4530.iteye.com/blog/70062

具体XML操作参见:

http://blog.csdn.net/wlh269/archive/2008/08/31/2855461.aspx

DOM4J  学习笔记:

http://heavyz.sourceforge.net/homepage/homepage_zh/comp/notes/dom4j.html

 

DOM创建XML方式:

package com.techson.himsnanhwa.admin.web;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
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;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class DomDemo{
	private Document doc;

	DomDemo() {
		try {
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			doc = builder.newDocument();
		} catch (ParserConfigurationException e) {
			System.out.println(e.getMessage());
		}
	}	
	/**
	 * 都是用  doc.createElement("");创建
	 * 层次结构使用appendChild(name); 实现
	 */
	public void createXml(String fileName) {
		Element root = doc.createElement("employees");
		doc.appendChild(root);
		
		Element employee = doc.createElement("employee");
		
		Element name = doc.createElement("name");
		name.appendChild(doc.createTextNode("小明"));
		name.setAttribute("id", "2006414");   //设置id
		employee.appendChild(name);
		
		Element sex = doc.createElement("sex");
		sex.appendChild(doc.createTextNode("m"));
		employee.appendChild(sex);
		
		Element age = doc.createElement("age");
		age.appendChild(doc.createTextNode("30"));
		employee.appendChild(age);
		
		root.appendChild(employee);
		
		TransformerFactory tf = TransformerFactory.newInstance();
		try {
			Transformer transformer = tf.newTransformer();
			DOMSource source = new DOMSource(doc);
			transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
			transformer.setOutputProperty(OutputKeys.INDENT, "yes");
			
			PrintWriter pw = new PrintWriter(new FileOutputStream(fileName));
			StreamResult result = new StreamResult(pw);
			transformer.transform(source, result);
			System.out.println("生成XML文件成功!");
		} catch (TransformerConfigurationException e) {
		} catch (IllegalArgumentException e) {
		} catch (FileNotFoundException e) {
		} catch (TransformerException e) {
		}
	}
	
	public static void main(String[] args){
		String fileName = "D:\\dom2.xml";
		DomDemo domDemo = new DomDemo();
		domDemo.createXml(fileName);

	}
}

 结果:

<?xml version="1.0" encoding="utf-8"?>
<employees>
	<employee>
		<name id="2006414">小明</name>
		<sex>m</sex>
		<age>30</age>
	</employee>
</employees>
 

 

总结:

Document document=new SAXReader.reader(“xml文路径/文件名xxx.xml”);//得到Document对象

Element root = document.getRootElement()//获得根节点

Iterator it=root.elementIterator(); //从根节点遍历子节点

Iterator iterator=element.elementIterator(); //再从子节点在遍历其子节点

对节点访问其属性用:Attribute leaderAttr =Element. attribute(“xxx”);

对节点访问其某个属性leaderAttr的名称:leaderAttr.getName();
对节点访问其某个属性leaderAttr的值:leaderAttr.getValue()

对节点访问其名称:Element.getName();

对节点访问其文本:Element. getText();
创建XML:  
Document document = DocumentHelper.createDocument();
Element root = document.addElement("root"); //根节点

Element root = new Element("pie");
Document doc = new Document(root);
 


详解Java解析XML的四种方法:

    http://developer.51cto.com/art/200903/117512.htm

java中四种操作(DOM、SAX、JDOM、DOM4J)xml方式详解与比较:

   http://hi.baidu.com/drager_000/blog/item/9ba51937a85c533f0b55a961.html

 

各种属性:

http://yifeng.iteye.com/blog/207239

 

分享到:
评论

相关推荐

    读取XML文件的四种方法

    使用DOM4J方法读取XML文件,需要创建SAXReader对象,读取XML文件得到Document对象,然后使用Element对象的elementIterator方法获取指定标签的迭代器,遍历迭代器进行数据提取。 优点:DOM4J方法提供了高效的XML解析...

    使用DOM4j解析XML文件

    在使用DOM4j解析XML文件时,首先需要导入DOM4j的相关包,如`SAXReader`用于读取XML文件,`Document`表示整个XML文档,`Element`表示XML文档中的元素,以及`Attribute`表示元素的属性。以下是一个使用DOM4j解析XML...

    DOM4J读取XML

    本文将详细介绍如何使用DOM4J来读取XML文件中的信息。 ### DOM4J读取XML详解 #### 初始化资源路径 代码片段中的`URL url = this.getClass().getClassLoader().getResource("/")`这一行是获取类加载器的根目录路径...

    dom4j以String的方式读取XML的内容,并给String的值赋值,写入XML中

    在这个场景中,我们关注的是如何使用DOM4J以String的形式读取XML内容,然后将String的值赋给XML中的特定节点,最后将更新后的内容写回XML文件。下面我们将详细探讨这一过程。 1. **解析XML到String** 要将XML文件...

    DOM、SAX、JDOM、DOM4J读写xml文档

    1. **DOM读取XML**:使用`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`来创建解析器并解析XML。解析完成后,可以通过`getElementsByTagName`、`getElementById`等方法访问元素。 2. **DOM...

    \"java xml 四\"之JDOM、DOM4J解析XML总结

    在压缩包中的“xml_6.pdf”文件可能包含了更详细的JDOM和DOM4J解析XML的教程,包括代码示例和最佳实践,建议进一步阅读以加深理解。 总的来说,JDOM和DOM4J都是强大的XML处理工具,选择哪个取决于具体项目的需求。...

    xml(jdom-dom4j).rar_DOM4J_dom4j xml java

    通过`SAXReader`可以读取XML文件,并利用事件回调来处理XML事件,如开始元素、结束元素等。 6. **DOM4J与JDOM的对比**: JDOM是另一个Java XML库,它专注于DOM模型。相比JDOM,DOM4J在功能上更强大,API设计更加...

    dom4j操作xml文件

    在本文中,我们将深入探讨如何利用DOM4J进行XML文件的读取、写入和修改操作。 一、XML基础 XML(Extensible Markup Language)是一种标记语言,用于存储和传输结构化数据。它具有自解释性,使得数据在不同的系统间...

    通过Dom4j创建和读取xml文件

    标题中的“通过Dom4j创建和读取xml文件”指的是使用Java库Dom4j来处理XML文档的操作。Dom4j是一个灵活且功能丰富的Java XML API,它提供了多种方式来解析、创建、修改XML文档。本知识点主要涵盖以下几个方面: 1. *...

    一写小例子,dom4J,dom,jdom,sax解析和创建XML文件,代码虽然简单,但是功能实现,适合入门

    XML(eXtensible Markup Language)是...以上代码展示了如何使用DOM4J、DOM、JDOM和SAX解析和创建XML文件的基本方法。这些示例适合初学者了解XML处理的基础知识,随着经验的积累,可以根据实际需求选择合适的解析方式。

    使用dom4j对xml的读写

    从读取XML文档到写入,再到查询和修改,DOM4J都有对应的API来简化这些任务。同时,理解并熟练运用XPath可以使XML操作更为高效。在实际开发中,选择合适的XML处理库取决于项目需求和个人偏好,DOM4J因其全面的功能而...

    dom4J生成xml、解析xml、生成xml文件实例

    - **读取XML文件**:使用`DocumentBuilder`或`SAXReader`读取XML文件内容。 - **获取Document对象**:解析后得到一个`Document`对象,它是XML文档的顶级节点。 - **遍历元素和属性**:通过`Element`对象的`elements...

    dom4j---xml解析jar包

    1. **读取XML文件**:使用`DocumentBuilder`或`SAXReader`类读取XML文件并创建`Document`对象。 2. **遍历XML结构**:通过`Element`对象的`elementIterator()`方法进行迭代,或者使用XPath表达式获取特定节点。 3. *...

    java中通过DOM4J解析XML文件

    在Java中解析XML文件,可以使用DOM4J库的`SAXReader`类来读取XML文档,并通过`Document`类来操作XML结构。例如,以下代码展示了如何使用DOM4J解析XML文件并获取元素的属性值: ```java SAXReader reader = new ...

    dom4j-1.6.1

    - 解析XML文件:使用`DocumentReader`或`SAXReader`读取XML文件并构建DOM4J树形结构。 - 遍历XML:利用`Node`接口的方法如`childNodes()`,`elements()`遍历XML结构。 - XPath查询:通过`XPathExpression`执行...

    dom4j读取XML文件详解

    在dom4j中,读取XML文件可以使用SAXReader或DOMReader两种方式。SAXReader是基于事件驱动的XML解析器,可以处理大型XML文件,具有高效率和低内存占用等特点。DOMReader是基于文档对象模型的XML解析器,可以将整个XML...

    java 通过dom4j操作 xml

    要使用DOM4J读取XML文件,首先需要创建一个`SAXReader`实例,然后用它来读取文件并得到Document对象。例如: ```java File file = new File("testXML.xml"); SAXReader reader = new SAXReader(); Document ...

    Dom4j解析xml的包和API以及例子

    相比Dom4j,JDOM可能更适合那些希望用Java原生方式操作XML的开发者,而Dom4j则在灵活性和性能上具有优势。 总的来说,Dom4j是一个强大的XML处理库,它的API设计得易于理解和使用,对于Java开发者来说,是处理XML...

    dom4j解析XML所需要的包

    DOM4J与JDOM、SAX、StAX等其他XML解析器相比,DOM4J提供了更丰富的功能,如XPath支持、XML Schema处理和事件驱动的解析模式。它既适合大型文档的处理,也适用于内存有限的环境。然而,对于非常大的XML文档,可能需要...

    用dom4j操作xml的例子

    在DOM4J中,我们首先需要读取XML文件并将其解析为Document对象。这可以通过`SAXReader`类完成。以下是一个简单的例子: ```java SAXReader reader = new SAXReader(); Document document = reader.read("example...

Global site tag (gtag.js) - Google Analytics