在做一个进销存项目,底层存储结构由原先的Mysql改为了直接用xml来存,所以特意去学了一下dom4j的一些使用方法。
可能一些例子会借用网上已流传开来的代码,毕竟挺适合入门的。
先贴代码吧。
/**
*
* @param filename
* @return:return o stand for sucessfully! return 1 stand for fail!
* @throws IOException
*/
public int createXmlFile(String filename) throws IOException{
int returnValue = 0;
//取得document对象,也就是XML文档对象
Document document = org.dom4j.DocumentHelper.createDocument();
//建立根结点
Element booksElement = document.addElement("books");
//加一行注解
booksElement.addComment("This is my Dom4J test firstly!!");
//建立第一个子结点
Element bookElement = booksElement.addElement("book");
//为子结点添加属性
bookElement.addAttribute("show", "yes");
//为子结点添加一个title标题
bookElement.addElement("title").setText("Lucene Studing");
//建立第二个子结点
bookElement = booksElement.addElement("book");
//为子结点添加属性
bookElement.addAttribute("show", "yes");
//为子结点添加一个title标题
bookElement.addElement("title").setText("Dom4j Tutorials");
//建立第三个子结点
bookElement = booksElement.addElement("book");
//为子结点添加属性
bookElement.addAttribute("show", "yes");
//为子结点添加一个title标题
bookElement.addElement("title").setText("Lucene in Action");
//建立第四个结点
Element owner = booksElement.addElement("owner");
owner.setText("O'Reilly");
File file = new File(filename);
FileWriter fw = new FileWriter(file);
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK");
org.dom4j.io.XMLWriter xmlWriter = new XMLWriter(fw,format);
xmlWriter.write(document);
xmlWriter.flush();
xmlWriter.close();
returnValue = 1;
return returnValue;
}
public int ModiXMLFile(String filename,String newfilename) throws IOException{
int resultvale = 0;
//取得document结象
try {
SAXReader reader = new org.dom4j.io.SAXReader(filename);
Document document = reader.read(new File(filename));
//取得list
List list = document.selectNodes("/books/book/@show");
Iterator iter = list.iterator();
while(iter.hasNext()){
Attribute attribute = (Attribute)iter.next();
if(attribute.getValue().equals("yes")){
attribute.setValue("no");
}
}
list = document.selectNodes("/books/owner");
iter = list.iterator();
if(iter.hasNext()){
Element owner = (Element)iter.next();
owner.setText("Tshinghua");
Element dataElement = owner.addElement("data");
dataElement.setText("2011-10-11");
dataElement.addAttribute("type", "Gregorian calendar");
}
list = document.selectNodes("/books/book");
iter = list.iterator();
while(iter.hasNext()){
Element bookElement = (Element)iter.next();
Iterator iterator = bookElement.elementIterator("title");
while(iterator.hasNext()){
Element titleElement = (Element)iterator.next();
if(titleElement.getText().equals("Dom4j Tutorials")){
bookElement.remove(titleElement);
}
}
}
XMLWriter writer = new XMLWriter(new FileWriter(new File(newfilename)));
writer.write(document);
writer.close();
return resultvale;
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return resultvale;
}
/**
* 格式化XML 文档,并解决中文问题
* @param filename
* @return
* @throws IOException
*/
public int formatXMLFile(String filename) throws IOException{
/** 返回操作结果, 0 表失败, 1 表成功*/
int returnValue = 0;
SAXReader reader = new SAXReader();
try {
Document document = reader.read(new File(filename));
XMLWriter writer = null;
//得到格式化输出对像
//紧凑型
OutputFormat format = OutputFormat.createCompactFormat();
//优雅型
//OutputFormat format = OutputFormat.createPrettyPrint();
//设定格式化的字符集,以支持中文
format.setEncoding("UTF-8");
writer = new XMLWriter(new FileWriter(new File(filename)),format);
writer.write(document);
writer.close();
returnValue =1;
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return returnValue;
}
/**
* 各种迭代法
* @param document
* @throws DocumentException
*/
public void bar(Document document) throws DocumentException {
Element root = document.getRootElement();
//迭代根元素下面的所有子元素
for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
Element element = (Element) i.next();
//处理代码
}
//迭代根元素下面名称为"foo"的子元素
for ( Iterator i = root.elementIterator( "foo" ); i.hasNext(); ) {
Element foo = (Element) i.next();
//处理代码
}
// 迭代根元素的属性attributes)元素
for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {
Attribute attribute = (Attribute) i.next();
// do something
}
}
上面是网上的一些代码例子,我自已是理解了,然后重新敲了一遍。体会是dom4j在读写操作xml方面还是挺不错的,生成xml文件实际是一个建树的过程,一个node一个node的接上去,然后对每个node加上一些属性,数值。最终会建成一颗只有一个根结点的树。当建好树,你想写入到真正的文件中时,如有中文,可以格式化一下文档对像,有两种排列文式可以让你选技,当然,不同版本的DOM4J可能有不同的外插件实现更多的人性化功能,而我觉得本身它最终的开发版功能已经足够了。
而对xml文件进行读取的时候,实际上是一个反向过程,它提供了XPATH等快速定位结点的功能,再结合一系列的迭代方法,相信你可以很快的找到你想要的结点,进而对它进行修改,删除等一系列操作。
下面贴出我写的一个添加表单的方法,以供大家学习。
/**
* 添加新的进货单到xml中
*
* @flag:1:为进货单 2:为出货单 3:为借卖单 4为借出单
* @return:如果操作成功返回1,否则反回0;
* @throws IOException
*/
public int AddStockList(Object obj) throws IOException {
int resultvale = 0;
Document document = null;
try {
SAXReader reader = new org.dom4j.io.SAXReader();
document = reader.read(new File("rc/进货单.xml"));
Element rootElement = document.getRootElement();
Element saleListElement = rootElement.addElement("进货单号").addAttribute("进货单号", "")
.addAttribute("日期", "").addAttribute("录入人", "")
.addAttribute("经手人", "").addAttribute("供应商名称", "")
.addAttribute("联系人", "").addAttribute("联系方式", "")
.addAttribute("总金额", "").addAttribute("已付款", "");
Element goodElement = saleListElement.addElement("进货项");
Element publicElement = goodElement.addElement("货物名称");
publicElement.setText("");
publicElement = goodElement.addElement("批次");
publicElement.setText("");
publicElement = goodElement.addElement("规格");
publicElement.setText("");
publicElement = goodElement.addElement("描述");
publicElement.setText("");
publicElement = goodElement.addElement("单价");
publicElement.setText("");
publicElement = goodElement.addElement("数量");
publicElement.setText("");
Element entryElement = goodElement.addElement("已入库记录")
.addAttribute("入库总数量", "");
publicElement = entryElement.addElement("入库记录")
.addAttribute("日期", "").addAttribute("数量", "");
Element expenditureElement = saleListElement.addElement("出账记录");
Element dataElement = expenditureElement.addElement("出账日期");
dataElement.setText("");
Element moneyElement = expenditureElement.addElement("出账金额");
moneyElement.setText("");
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK");
XMLWriter writer = new XMLWriter(new FileWriter(new File(
"rc/进货单.xml")),format);
writer.write(document);
writer.close();
return resultvale;
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return resultvale;
}
/**
* 以清单号来查询数据
* @param number
* @return
*/
public Object SelectByNumber(String number){
SAXReader reader = new org.dom4j.io.SAXReader();
Document document;
try {
document = reader.read(new File("rc/借出单.xml"));
Element rootElement = document.getRootElement();
Iterator iter = rootElement.elementIterator();
while(iter.hasNext()){
Element infoElement = (Element)iter.next();
if(infoElement.attributeValue("借卖单号").equals(number)){
//取数据
}
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
/**
* 保存修改后的清单
* @param boj
*/
public void SaveGoodsList(Object obj,String number){
SAXReader reader = new org.dom4j.io.SAXReader();
Document document;
try {
document = reader.read(new File("rc/借卖单.xml"));
Element rootElement = document.getRootElement();
Iterator iter = rootElement.elementIterator();
while(iter.hasNext()){
Element infoElement = (Element)iter.next();
if(infoElement.attributeValue("借卖单号").equals(number)){
//移除该结点,利用add方法加入新结点
document.remove(infoElement);
AddMarginSellingList(obj);
}
}
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK");
XMLWriter writer = new XMLWriter(new FileWriter(new File(
"rc/借卖单.xml")),format);
writer.write(document);
writer.close();
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 以清单号来删除某一清单
* @param obj
* @param number
*/
public void DelGoodsList(String number){
SAXReader reader = new org.dom4j.io.SAXReader();
Document document;
try {
document = reader.read(new File("rc/借卖单.xml"));
Element rootElement = document.getRootElement();
Iterator iter = rootElement.elementIterator();
while(iter.hasNext()){
Element infoElement = (Element)iter.next();
if(infoElement.attributeValue("借卖单号").equals(number)){
//移除该结点,利用add方法加入新结点
System.out.println(infoElement.getName());
rootElement.remove(infoElement);
}
}
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK");
XMLWriter writer = new XMLWriter(new FileWriter(new File(
"rc/借卖单.xml")),format);
writer.write(document);
writer.close();
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
分享到:
相关推荐
4. **XPath支持**:DOM4J实现了XPath表达式,允许通过简单的字符串查询XML文档中的任意节点,大大提高了代码的可读性和效率。 5. **XML Schema支持**:DOM4J能够处理XML Schema,进行XML文档的验证,确保数据的正确...
在本文中,我们将深入探讨DOM4J 1.6.1版本的安装及其在Maven项目中的应用。 首先,DOM4J是一个基于Java的XML处理库,它支持多种XML处理模型,如SAX和DOM。DOM4J的核心特性包括XML文档的构建、解析、查询和修改。它...
首先,DOM4J 1.6.1是较早的一个稳定版本,广泛应用于各种项目。它支持SAX和DOM解析器,同时提供了基于事件的解析模型和基于树的解析模型。此版本的主要特性包括: 1. 支持XPath:DOM4J提供了一种强大的方式来查询...
5. **灵活性**:DOM4J可以轻松地与Spring、Hibernate等框架集成,广泛应用于企业级开发中。 6. **XML Schema支持**:DOM4J能够处理XML Schema,进行XML文档的验证,确保数据的正确性。 7. **XML编解码**:DOM4J...
DOM4J是一个强大的Java XML API,它提供了丰富的XML处理功能,包括文档对象模型(DOM)、简单API(SAX)以及事件驱动模型(StAX)。在本篇文章中,我们将深入探讨DOM4J 2.1.3版本,了解其核心特性、用途以及如何利用...
以下是一个简单的示例,展示如何使用DOM4J读取XML文档并查询元素: ```java import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; public class Dom4JExample { public ...
DOM4J 1.6.1是这个库的一个稳定版本,发布于较早时期,但依然广泛应用于许多Java项目中,尤其是那些需要处理XML数据的系统。 首先,我们要了解DOM4J的核心概念。DOM(Document Object Model)是一种W3C标准,用于...
DOM4J 2.1.1 是一个针对Java平台的高效、开源的XML处理库,其全称为“Document Object Model for Java”。这个库提供了一系列强大...无论是在简单的XML读写,还是复杂的XML操作和处理,DOM4J都能提供强大而灵活的支持。
在Java应用程序中,DOM4J作为一个流行的选择,尤其在处理复杂的XML结构时,因为它提供了比标准DOM(Document Object Model)更简单和更有效的接口。 标题中的"dom4j.jar下载"指的是获取DOM4J库的可执行文件,即Java...
在实际应用中,解析SOAP消息通常结合网络请求,例如使用Apache HttpClient发送SOAP请求并接收响应,然后使用DOM4J解析响应内容。了解DOM4J库的其他功能,如XPath查询、命名空间处理等,可以帮助更高效地处理复杂SOAP...
通过研究其中的代码,你可以掌握DOM4J处理XML的基本技巧,并理解如何将其应用到实际的Java项目中,以实现XML文件的高效管理和操作。无论是新手还是有经验的开发者,都能从中受益匪浅,提升对XML处理的能力。
DOM4J因其简单易用和强大的功能,成为Java XML处理领域的重要选择。学习DOM4J有助于理解XML处理的基本原理,提升XML文档操作的效率,同时在实际项目中能够更灵活地处理XML数据。无论是新手还是经验丰富的开发者,DOM...
在这个“java dom4j 简单示例”中,我们将探讨如何在Spring框架的上下文中,结合数据库操作,使用DOM4J生成XML文档,并进一步利用Transformer进行XSLT转换。 首先,DOM4J的核心概念是Document对象,它代表整个XML...
首先,Dom4j的应用非常简单,只需要对XML-DOM模型有基本的了解就能上手使用。 Dom4j的接口大部分定义在org.dom4j包中,这包括对XML文档节点进行操作的接口。例如,org.dom4j.Document接口代表了整个XML文档对象,...
DOM4J是一个强大的Java库,专门用于处理XML文档。它为开发者提供了丰富的API,使得XML的解析、创建、修改和查询变得更为简单。这个“dom4j完整版.zip”...同时,提供的相关资源也能帮助开发者更好地理解和应用DOM4J。
1. **DOM4J概述**:DOM4J是一个开源的Java XML API,它是对DOM、SAX和JDOM的扩展,提供了更简单、更灵活且更强大的API。它支持XPath和XSLT,可以用于构建和解析XML文档,同时也支持事件模型和流解析。 2. **XML处理...
4. **XPath支持**:XPath是一种在XML文档中查找信息的语言,dom4j支持XPath 1.0规范,可以通过简单的表达式快速找到需要的节点。 5. **事件处理**:dom4j也支持事件处理模型,允许开发者在XML解析过程中响应特定的...