- 浏览: 731527 次
- 性别:
- 来自: 嘉兴
文章分类
- 全部博客 (386)
- Struts1.1 (2)
- Database (18)
- Core Java (15)
- Log4j (4)
- SSH (0)
- Dao (1)
- Architecture Design (1)
- References (2)
- Eclipse&MyEclipse (10)
- Hibernate (7)
- Spring (8)
- JavaMail (1)
- Data Structure And Algorithm (48)
- Struts 2 (2)
- SSI (1)
- SSL (2)
- JSTL (1)
- EJB3 (2)
- NET (2)
- XML (2)
- Components (2)
- Ant (3)
- Multi Thread (1)
- Performance Monitoring (1)
- Web Server (17)
- Oracle (1)
- jQuery (8)
- Regular Expression (1)
- Weblogic (1)
- Exception (1)
- Security (2)
- File Manipulation (1)
- JavaScript (12)
- JVM (2)
- HTML&DIV&CSS (4)
- Android (10)
- Beyond GFW (0)
- Business (0)
- SVN (6)
- 虚拟主机 (1)
- Virtual Host (3)
- My mentality (5)
- OS (15)
- ISPMP (3)
- Magento (5)
- Jsoup&HttpClient (7)
- LINUX (9)
- Database Design (0)
- Power Designer (1)
- TaobaoOpenPlatform (2)
- C/C++ (3)
- Maven (11)
- Quartz (1)
- Load Balance (1)
- Zabbix (4)
- Product&Business (1)
- Pay Interface (1)
- Tomcat (2)
- Redis (1)
- 集群 (1)
- Session (1)
- 共享Session (1)
- Jedis (1)
- jenkins (1)
- 持续集成 (1)
- Web前端 (1)
最新评论
-
aqq331325797:
特意注册账号上来说一句。牛逼!
swagger2.2.2 与 spring cloud feign冲突 -
KitGavinx:
跨顶级域名怎么保持sessionid一致?
Tomcat7集群共享Session 基于redis进行统一管理 -
jaychang:
dujianqiao 写道HI ,能否给一个完整的demo 啊 ...
淘宝订单同步方案 - 丢单终结者 -
GGGGeek:
找了一会儿,感觉mybatis应该没有这种操作,直到发现博主的 ...
mybatis collection list string -
dujianqiao:
HI ,能否给一个完整的demo 啊 ?
淘宝订单同步方案 - 丢单终结者
本文主要讨论了用dom4j解析 XML的基础问题,包括建立XML文档,添加、修改、
删除节点,以及格式化(美化)输出和中文问题。可作为dom4j的入门资料。
1 下载与安装
dom4j是 sourceforge.net上的一个开源项目,主要用于对 XML的解析。从2001 年7 月发布
第一版以来,已陆续推出多个版本,目前最高版本为1.5。
dom4j专门针对Java 开发,使用起来非常简单、直观,在Java 界,dom4j正迅速普及。
可以到http://sourceforge.net/projects/dom4j下载其最新版。
dom4j-1.6.1.zip的压缩包,解压后有一个dom4j-1.6.1.jar
文件,这就是应用时需要引入的类包,另外还有一个 jaxen-1.1-beta-6.jar 文件,一般也需要
引入,否则执行时可能抛java.lang.NoClassDefFoundError: org/jaxen/JaxenException异常,其
他的包可以选择用之。
2 示例XML
为了方便起见,先定义了一个XML文档,可能有不合理的地方,但只是为了演示dom4j对XML文档如何进行简单的基本操作的。
<?xml version="1.0" encoding="GBK"?> <books> <!--This is a test for dom4j,the goal is just for learn the base use dom4j --> <book version="1.0"> <title>Think In Java 0</title> <author>Jay Chang0 <name pastUsedName="Jay"/> </author> <publisher>Tsing Hua</publisher> </book> <book version="1.0"> <title>Think In Java 1</title> <author>Jay Chang1 <name pastUsedName="Jay"/> </author> <publisher>Tsing Hua</publisher> </book> <book version="1.0"> <title>Think In Java 2</title> <author>Jay Chang2 <name pastUsedName="Jay"/> </author> <publisher>Tsing Hua</publisher> </book> </books>
例子的XML文件用于村粗多本书 的信息,书的信息包括书名,作者(作者元素有以子元素name,name元素由一个属性,代表作者的曾用名),出版社,book元素有一个version(版本)属性,待会在修改XML文档时会用到。
3 创建XML文档
/** * 创建一个XML文档文件名及存储路径由filePath指定(如"D:\\dom4j_example\\books.xml") * * @param filePath 文件存储路径及文件名 * @return ret 操作成功返回0,否则返回-1 */ public static int createXMLDocument(String filePath) { Document xmlDocument = DocumentHelper.createDocument(); // 可以通过OutputFormat来设置 // xmlDocument.setXMLEncoding("UTF-8"); Element booksElement = xmlDocument.addElement("books"); xmlDocument.setRootElement(booksElement); //添加一注释 booksElement .addComment("This is a test for dom4j,the goal is just for learn the base use dom4j "); //向books元素添加3个book元素 for (int i = 0; i < 3; i++) { Element bookOne = booksElement.addElement("book"); bookOne.addAttribute("version", "1.0"); Element bookOneTitle = bookOne.addElement("title"); bookOneTitle.setText("Think In Java " + i); Element bookOneAuthor = bookOne.addElement("author"); bookOneAuthor.setText("Jay Chang" + i); Element bookOneAuthorName = bookOneAuthor.addElement("name"); bookOneAuthorName.addAttribute("pastUsedName", "Jay"); Element publish = bookOne.addElement("publisher"); publish.setText("Tsing Hua"); } int ret = -1; XMLWriter writer = null; try { int indexOfLastSeparator = filePath.lastIndexOf(File.separator); String directoryStr = filePath.substring(0, indexOfLastSeparator); File directory = new File(directoryStr); if (!directory.exists()) { System.out.println(directory); directory.mkdirs(); } String fileName = filePath.substring(indexOfLastSeparator + 1); File xmlFile = new File(directory, fileName); if (!xmlFile.exists()) { System.out.println(xmlFile); xmlFile.createNewFile(); } OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("GBK"); writer = new XMLWriter(new FileWriter(xmlFile), format); writer.write(xmlDocument); ret = 0; } catch (IOException e) { e.printStackTrace(); } finally { if (writer != null) try { writer.close(); } catch (IOException e) { e.printStackTrace(); } } return ret; }
说明:
Document document = DocumentHelper.createDocument();
通过这句定义一个XML文档对象。
Element booksElement = document.addElement("books");
通过这句定义一个XML元素,这里添加的是根节点。
Element有几个重要的方法:
l l addComment:添加注释
l l addAttribute:添加属性
l l addElement:添加子元素
最后通过 XMLWriter 生成物理文件,默认生成的 XML 文件排版格式比较乱,可以通过
OutputFormat 类的 createCompactFormat()方法或 createPrettyPrint()方法格式化输出,默认采
用createCompactFormat()方法,显示比较紧凑
默认的格式:
<?xml version="1.0" encoding="UTF-8"?> <books><!--This is a test for dom4j,the goal is just for learn the base use dom4j --><book version="1.0"><title>Think In Java 0</title><author>Jay Chang0<name pastUsedName="Jay"/></author><publisher>Tsing Hua</publisher></book><book version="1.0"><title>Think In Java 1</title><author>Jay Chang1<name pastUsedName="Jay"/></author><publisher>Tsing Hua</publisher></book><book version="1.0"><title>Think In Java 2</title><author>Jay Chang2<name pastUsedName="Jay"/></author><publisher>Tsing Hua</publisher></book></books>
如果采用createPrettyPrint()的话,xml文档格式会比较美观
OutputFormat format = OutputFormat.createPrettyPrint();
writer = new XMLWriter(new FileWriter(newXMLFile), format);
writer.write(xmlDocument);
即标题 2中列出的XML文档的那个格式,看上去比较舒服!
4 修改XML文档
该方法演示了对XML文档的三个操作:
1) 将所有version(版本信息)为1.0书的版本信息全改为1.1
2) 将所有的publiser(出版社)为Tsing Hua书的出版社改为Peking University
3) 将title(书名)为Think In Java 1书的title元素删掉
/** * 修改XML文档,操作又修改元素属性,修改元素文本值,向元素添加子元素,删除元素 * * @param filePath 需要读入的XML文档路径及文件名 * @param newFilePath 修改后XML文档存储路径及文件名(如D:\\dom4j_example\\books_modified.xml) * @return ret 操作成功返回0,否则返回-1 */ public static int modifyXMLDocument(String filePath, String newFilePath) { SAXReader reader = new SAXReader(); int ret = -1; XMLWriter writer = null; try { Document xmlDocument = reader.read(new File(filePath)); // 修改内容1:将所有书本的版本属性改为1.1 List versionList = xmlDocument.selectNodes("books/book/@version"); Iterator verAttIt = versionList.iterator(); while (verAttIt.hasNext()) { Attribute attributeVersion = (Attribute) verAttIt.next(); if ("1.0".equals(attributeVersion.getValue())) attributeVersion.setValue("1.1"); } // 修改内容2:将出版社改为Peking,并增加日期元素,文本值为2010-03-22 List publishList = xmlDocument.selectNodes("books/book/publisher"); Iterator pubEleIt = publishList.iterator(); while (pubEleIt.hasNext()) { Element pubElement = (Element) pubEleIt.next(); if ("Tsing Hua".equals(pubElement.getText())) { pubElement.setText("Peking University"); Element pubTime = pubElement.addElement("publishTime"); pubTime.setText("2010-03-22"); } } // 修改内容3:将title为Think In Java 1的元素删除掉 List bookList = xmlDocument.selectNodes("books/book"); Iterator bookIt = bookList.iterator(); while (bookIt.hasNext()) { Element bookElement = (Element) bookIt.next(); Iterator titleIt = bookElement.elementIterator("title"); while (titleIt.hasNext()) { Element titleElement = (Element) titleIt.next(); if ("Think In Java 1".equals(titleElement.getText())) { bookElement.remove(titleElement); } } } // 将Document写到一个新的XML文件中 int indexOfLastSeparator = newFilePath.lastIndexOf(File.separator); String directoryStr = newFilePath.substring(0, indexOfLastSeparator); File directory = new File(directoryStr); if (!directory.exists()) { directory.mkdirs(); } String fileName = newFilePath.substring(indexOfLastSeparator + 1); File newXMLFile = new File(directory, fileName); if (!newXMLFile.exists()) { newXMLFile.createNewFile(); } OutputFormat format = OutputFormat.createPrettyPrint(); writer = new XMLWriter(new FileWriter(newXMLFile), format); writer.write(xmlDocument); ret = 0; } catch (DocumentException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (writer != null) try { writer.close(); } catch (IOException e) { e.printStackTrace(); } } return ret; }
说明:
List list = document.selectNodes("/books/book/@version" );
所有book元素的versino列表
list = document.selectNodes("/books/book");
所有book元素
上述代码通过xpath查找到相应内容。
通过setValue()、setText()修改节点内容。
通过remove()删除节点或属性。
5 完整代码
import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Iterator; import java.util.List; import org.dom4j.Attribute; 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 Dom4jParse { /** * 创建一个XML文档文件名及存储路径由filePath指定(如"D:\\dom4j_example\\books.xml") * * @param filePath 文件存储路径及文件名 * @return ret 操作成功返回0,否则返回-1 */ public static int createXMLDocument(String filePath) { Document xmlDocument = DocumentHelper.createDocument(); // 可以通过OutputFormat来设置 // xmlDocument.setXMLEncoding("UTF-8"); Element booksElement = xmlDocument.addElement("books"); xmlDocument.setRootElement(booksElement); //添加一注释 booksElement .addComment("This is a test for dom4j,the goal is just for learn the base use dom4j "); //向books元素添加3个book元素 for (int i = 0; i < 3; i++) { Element bookOne = booksElement.addElement("book"); bookOne.addAttribute("version", "1.0"); Element bookOneTitle = bookOne.addElement("title"); bookOneTitle.setText("Think In Java " + i); Element bookOneAuthor = bookOne.addElement("author"); bookOneAuthor.setText("Jay Chang" + i); Element bookOneAuthorName = bookOneAuthor.addElement("name"); bookOneAuthorName.addAttribute("pastUsedName", "Jay"); Element publish = bookOne.addElement("publisher"); publish.setText("Tsing Hua"); } int ret = -1; XMLWriter writer = null; try { int indexOfLastSeparator = filePath.lastIndexOf(File.separator); String directoryStr = filePath.substring(0, indexOfLastSeparator); File directory = new File(directoryStr); if (!directory.exists()) { System.out.println(directory); directory.mkdirs(); } String fileName = filePath.substring(indexOfLastSeparator + 1); File xmlFile = new File(directory, fileName); if (!xmlFile.exists()) { System.out.println(xmlFile); xmlFile.createNewFile(); } //OutputFormat format = OutputFormat.createPrettyPrint(); //format.setEncoding("GBK"); writer = new XMLWriter(new FileWriter(xmlFile)); writer.write(xmlDocument); ret = 0; } catch (IOException e) { e.printStackTrace(); } finally { if (writer != null) try { writer.close(); } catch (IOException e) { e.printStackTrace(); } } return ret; } /** * 修改XML文档,操作又修改元素属性,修改元素文本值,向元素添加子元素,删除元素 * * @param filePath 需要读入的XML文档路径及文件名 * @param newFilePath 修改后XML文档存储路径及文件名(如D:\\dom4j_example\\books_modified.xml) * @return ret 操作成功返回0,否则返回-1 */ public static int modifyXMLDocument(String filePath, String newFilePath) { SAXReader reader = new SAXReader(); int ret = -1; XMLWriter writer = null; try { Document xmlDocument = reader.read(new File(filePath)); // 修改内容1:将所有书本的版本属性改为1.1 List versionList = xmlDocument.selectNodes("books/book/@version"); Iterator verAttIt = versionList.iterator(); while (verAttIt.hasNext()) { Attribute attributeVersion = (Attribute) verAttIt.next(); if ("1.0".equals(attributeVersion.getValue())) attributeVersion.setValue("1.1"); } // 修改内容2:将出版社改为Peking,并增加日期元素,文本值为2010-03-22 List publishList = xmlDocument.selectNodes("books/book/publisher"); Iterator pubEleIt = publishList.iterator(); while (pubEleIt.hasNext()) { Element pubElement = (Element) pubEleIt.next(); if ("Tsing Hua".equals(pubElement.getText())) { pubElement.setText("Peking University"); Element pubTime = pubElement.addElement("publishTime"); pubTime.setText("2010-03-22"); } } // 修改内容3:将title为Think In Java 1的元素删除掉 List bookList = xmlDocument.selectNodes("books/book"); Iterator bookIt = bookList.iterator(); while (bookIt.hasNext()) { Element bookElement = (Element) bookIt.next(); Iterator titleIt = bookElement.elementIterator("title"); while (titleIt.hasNext()) { Element titleElement = (Element) titleIt.next(); if ("Think In Java 1".equals(titleElement.getText())) { bookElement.remove(titleElement); } } } // 将Document写到一个新的XML文件中 int indexOfLastSeparator = newFilePath.lastIndexOf(File.separator); String directoryStr = newFilePath.substring(0, indexOfLastSeparator); File directory = new File(directoryStr); if (!directory.exists()) { directory.mkdirs(); } String fileName = newFilePath.substring(indexOfLastSeparator + 1); File newXMLFile = new File(directory, fileName); if (!newXMLFile.exists()) { newXMLFile.createNewFile(); } OutputFormat format = OutputFormat.createPrettyPrint(); writer = new XMLWriter(new FileWriter(newXMLFile), format); writer.write(xmlDocument); ret = 0; } catch (DocumentException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (writer != null) try { writer.close(); } catch (IOException e) { e.printStackTrace(); } } return ret; } public static void main(String[] args) { System.out .println(createXMLDocument("f:\\Dom4j_Learn\\example1\\books.xml")); System.out.println(modifyXMLDocument( "F:\\Dom4j_Learn\\example1\\books.xml", "F:\\Dom4j_Learn\\example1\\books_modified.xml")); } }
相关推荐
"Dom4j 生成 XML 和解析 XML" Dom4j 是一个 Java 库,用于处理 XML 文档。它提供了生成和解析 XML 文档的功能。在本文中,我们将学习如何使用 Dom4j 生成 XML 文档和解析 XML 文档。 生成 XML 文档 使用 Dom4j ...
Dom4J作为一款优秀的Java XML API,以其简洁、高效的特点,在生成、解析和操作XML文档方面表现突出。本文将深入探讨如何使用Dom4J库来创建XML文档,包括初始化文档、添加元素、设置属性、插入文本以及最终保存文档至...
### DOM4J解析XML详解 #### 一、DOM4J简介与特性 DOM4J是一个由dom4j.org开发的开源XML解析包,专为Java平台设计,它不仅支持DOM、SAX和JAXP标准,还巧妙地融入了Java集合框架,使其成为Java开发者在处理XML数据时...
解析XML文件后,DOM4J会构建一个`Document`对象树,你可以通过这个树来访问和操作XML的所有元素。 - **Element对象**:`Element`是XML文档中的节点,相当于HTML的`<tag>`。DOM4J提供了丰富的API来操作元素,如获取...
为了使用这个库,你需要将该jar包添加到项目的类路径中,然后就可以通过DOM4J提供的类和方法来解析和操作XML文件了。 总之,DOM4J是一个功能强大的XML处理库,无论是在小型项目还是大型系统中,都能发挥其优势,...
DOM4J通过构建DOM树(Document Object Model)来解析XML。DOM模型是一种将XML文档转换为内存中对象树的表示方式。在DOM4J中,我们可以使用`DocumentBuilderFactory`和`DocumentBuilder`来创建`Document`对象,然后...
**dom4J生成和解析XML文件** DOM4J是一个强大的Java XML API,它不仅提供了DOM、SAX和JDOM等接口的实现,还提供了一种更简单、更灵活的方式来处理XML文档。这篇博客()可能详细介绍了如何使用DOM4J来生成和解析XML...
1、xml文档解析 2、 dom4j解析xml 3、实现xml文件解析 xml字符串解析 xml MAP键值对解析 4、实现xml写入与生成文件
Java DOM4J解析XML是一种常见的处理XML文档的技术,它提供了灵活且高效的API,使得开发者能够方便地读取、写入、修改以及操作XML文件。DOM4J是Java中一个非常强大的XML处理库,它结合了DOM、SAX和JDOM的优点,同时也...
本文将详细介绍生成和解析XML的四种主要方法:DOM、DOM4J、SAX和JDOM。 1. DOM(Document Object Model) DOM是W3C组织推荐的一种解析XML的标准方式。它将XML文档视为一个树形结构,每个节点代表XML文档的一部分。...
DOM4J作为一个强大的XML处理库,提供了丰富的API,使得XML的解析、操作和生成变得更加简单。无论是处理小规模的XML文档还是大型XML数据,DOM4J都能提供高效且易于使用的解决方案。通过阅读和理解`Test.java`中的代码...
DOM4J提供了对XML Schema的全面支持,允许开发者在解析XML文档时进行严格的模式验证,确保数据的准确性和一致性。这对于企业级应用尤为重要,因为它们往往需要处理大量的结构化数据。 **3. 基于事件的处理** 对于...
DOM4J作为解析XML的工具,其主要功能和特性包括: 1. **DOM模型**:DOM4J提供了基于DOM(Document Object Model)的接口,允许开发者以树形结构操作XML文档。通过`Document`对象,可以访问XML文档的根元素,并通过`...
首先,`XMLTest.java`是一个包含DOM4J操作XML的代码实例。通常,这样的程序会包含以下步骤: 1. 引入DOM4J库:在Java项目中,你需要导入DOM4J的相关类,如`org.dom4j.Document`、`org.dom4j.DocumentHelper`等。这...
在这个项目中,我们利用DOM4J来解析XML文件,并通过Java的反射机制将解析出的信息存储到特定的类中。 首先,我们需要了解XML的基本概念。XML(Extensible Markup Language)是一种标记语言,常用于数据交换和结构化...
**DOM4J解析XML数据** DOM4J是一个强大的Java库,专门用于处理XML文档,它提供了灵活且高效的方式来解析、创建、修改XML内容。在Java世界中,XML处理有多种方式,如DOM、SAX、StAX等,而DOM4J因其易用性和功能丰富...
在这个场景中,我们将深入理解如何使用DOM4J来生成XML文档以及如何解析XML内容。 首先,生成XML文档涉及以下几个主要步骤: 1. **创建Document对象**:`DocumentHelper.createDocument()`方法用于创建一个新的XML...
DOM4j则是一个强大的Java库,用于处理XML文档,提供了丰富的API来实现XML的读取、写入、修改等操作。在这个示例中,我们将深入探讨如何利用Maven管理和DOM4j来操作XML文件。 首先,让我们了解一下Maven。Maven是...