通过Dom4j读写XML文档

简介:
[原]通过Dom4j读写XML文档


package com.yy.xml.dom4j;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class User {
private String xmlDocName = "users.xml";

public User() {
super();
// TODO Auto-generated constructor stub
}

/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
User user = new User();
//user.newXML();
user.readXML();
}

public void newXML(){
/**
 *  users.xml
 */
Document doc = DocumentHelper.createDocument(); //users.xml


/**
 * 根元素 users
 */
Element users = doc.addElement("users" ; //根元素 users
doc.setRootElement(users);
users.addComment("the xml document about some login system information of users" ;


/**
 * 根元素 users 下的子元素 user
 */
Element user = users.addElement("user" ; // 新增 users 的一个子元素 user
user.addAttribute("id","1" ; //增加user的一个属性,并设置此属性值
Element username = user.addElement("username" ; // 新增 user 元素的子元素 username
username.setText("yy" ; //设置 username 的值
Element password = user.addElement("password" ; // 新增 user 元素的子元素 password
password.setText("12345678" ; //设置 password 的值

Element user2 = user.createCopy(); //通过对已有元素的拷贝,产生同一元素的不同实体
user2.attribute("id" .setValue("2" ;
user2.element("username" .setText("liyun" ;
user2.element("password" .setText("87654321" ;
users.add(user2);  //根元素增加已有的子元素


/**
 * 通过 org.dom4j.io.OutputFormat 来设置XML文档输出格式
 */
OutputFormat format = OutputFormat.createPrettyPrint(); //设置XML文档输出格式
format.setEncoding("GB2312" ; //设置XML文档的编码类型
format.setSuppressDeclaration(true);
format.setIndent(true); //设置是否缩进
format.setIndent("   " ; //以空格方式实现缩进
format.setNewlines(true); //设置是否换行


/**
 *  通过 org.dom4j.io.XMLWriter 创建XML文档(写)
 */
try {
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(new File(xmlDocName)),format);
xmlWriter.write(users);
xmlWriter.close();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


public void readXML(){
SAXReader saxReader =  new SAXReader();
try {
/**
 *  先通过 org.dom4j.io.SAXReader 读入整份XML文档
 */
Document usersXMLDoc = saxReader.read(new FileInputStream(new File(xmlDocName)));


/**
 *  取得XML文档的各元素及其值
 */
Element users = usersXMLDoc.getRootElement(); //取得XML文档的根元素
Iterator users_subElements = users.elementIterator(); //以Iterator集合得到根元素下的所有子元素
//Iterator users_subElements = users.elementIterator("user" ; //可以指定所要得到的子元素的名称
while(users_subElements.hasNext()){
  Element user = (Element)users_subElements.next();
  List user_subElements = user.elements(); //以List集合得到 user 下的所有子元素
  //List user_subElements = user.elements("username" ; //可以指定名称取得所要取的元素
  for(int i=0;i<user_subElements.size();i++){
  Element ele = (Element)user_subElements.get(i);
  System.out.print(ele.getName()+" : "+ele.getText()+"   " ;
  }
  System.out.println();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}

本文转自kenty博客园博客,原文链接http://www.cnblogs.com/kentyshang/archive/2007/01/16/621398.html如需转载请自行联系原作者


kenty

相关文章
|
4月前
|
XML 数据采集 存储
使用Java和XPath在XML文档中精准定位数据
在数据驱动的时代,从复杂结构中精确提取信息至关重要。XML被广泛用于数据存储与传输,而XPath则能高效地在这些文档中导航和提取数据。本文深入探讨如何使用Java和XPath精准定位XML文档中的数据,并通过小红书的实际案例进行分析。首先介绍了XML及其挑战,接着阐述了XPath的优势。然后,提出从大型XML文档中自动提取特定产品信息的需求,并通过代理IP技术、设置Cookie和User-Agent以及多线程技术来解决实际网络环境下的数据抓取问题。最后,提供了一个Java示例代码,演示如何集成这些技术以高效地从XML源中抓取数据。
176 7
使用Java和XPath在XML文档中精准定位数据
|
4月前
|
XML JavaScript Java
【JAVA XML 探秘】DOM、SAX、StAX:揭秘 Java 中 XML 解析技术的终极指南!
【8月更文挑战第25天】本文详细探讨了Java中三种主流的XML解析技术:DOM、SAX与StAX。DOM将XML文档转换为树状结构,便于全方位访问和修改;SAX采取事件驱动模式,适用于大型文件的顺序处理;StAX则兼具DOM和SAX的优点,支持流式处理和随机访问。文中提供了每种技术的示例代码,帮助读者理解如何在实际项目中应用这些解析方法。
208 1
|
5月前
|
XML JavaScript 数据格式
XML DOM 浏览器差异
所有 modern browsers 支持 W3C DOM 规范, 但仍存在差异, 主要是处理空白和换行的不同。例如, 在 XML 中, Internet Explorer 不会将空白或换行视为文本节点, 而其他浏览器则会。这会导致相同的 XML 文档在 IE 中的子节点数为 4, 而在其他浏览器中为 9:
|
2月前
|
XML 编解码 JavaScript
DOM(文档对象模型)和 BOM(浏览器对象模型)
【10月更文挑战第19天】在前端开发中,理解 DOM(文档对象模型)和 BOM(浏览器对象模型)是至关重要的。它们是 Web 开发的基础,为我们提供了与网页文档和浏览器进行交互的能力。
|
4月前
|
JavaScript 前端开发
js之DOM 文档对象模型
js之DOM 文档对象模型
29 1
js之DOM 文档对象模型
|
5月前
|
XML JavaScript 数据格式
XML DOM 浏览器差异
输出子节点的数量。结果取决于您所使用的浏览器。IE 浏览器会输出 4(提醒 4 个子节点),而其他浏览器会输出 9(提醒 9 个子节点)。
|
5月前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
遍历(Traverse)意味着在节点树中进行循环或移动。
|
5月前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
遍历(Traverse)意味着在节点树中进行循环或移动。
|
5月前
|
XML 存储 JavaScript
XML DOM - 访问节点
通过 DOM, 可全面访问 XML 文档的节点。实现这一目标有 3 种方法: - 使用 `getElementsByTagName()` 方法, - 循环遍历节点树, - 利用节点间关系进行导航。 `getElementsByTagName()` 返回一个 Node List,即一种节点数组形式。示例代码通过 `loadXMLDoc()` 函数加载 &quot;books.xml&quot; 文件到 `xmlDoc` 变量中,并随后在变量 `x` 中保存所需节点信息。
|
4月前
|
JavaScript 前端开发
js之DOM 文档对象模型
js之DOM 文档对象模型