对于Java解析XML有很多种方法,不过用的最多应该就是dom4j了。先来无事,稍微研究一下它。
1.下载
下载地址:http://sourceforge.net/projects/dom4j
目前最高版本为1.6.1。
dom4j1.6.1的完整版大约11M,是一个名为dom4j-1.6.1.zip的压缩包,解压后有一个dom4j-1.6.1.jar文件,这就是应用时需要引入的类包,另外还需要引入jaxen-1.1-beta-6.jar文件,否则执行时可能抛java.lang.NoClassDefFoundError: org/jaxen/JaxenException异常,其他的包可以选择用之。
2.应用
import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.net.MalformedURLException; import java.util.Iterator; import java.util.List; import org.dom4j.Attribute; import org.dom4j.CDATA; import org.dom4j.Comment; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.DocumentType; import org.dom4j.Element; import org.dom4j.Namespace; import org.dom4j.Node; import org.dom4j.ProcessingInstruction; import org.dom4j.Text; import org.dom4j.VisitorSupport; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; /** * @author:kenny dong */ public class Dom4JDemo { /** * @param args * @throws DocumentException * @throws IOException */ public static void main(String[] args) throws DocumentException, IOException { Dom4JDemo demo = new Dom4JDemo(); Document doc = demo.read("D:/Demo.xml"); //demo.IteratorAllElement(demo.getRootElement(doc)); //demo.IteratorSpecialElement(demo.getRootElement(doc),"journal"); //demo.IteratorAttribute(demo.getRootElement(doc)); //demo.treeWalk(doc); //doc.accept(new MyVisitor()); //demo.selectSingleNodeTest(doc); demo.writeToFile(demo.createDocument()); demo.decorateOutputXML(demo.createDocument()); } /** * read from outside * @param fileName * @return * @throws MalformedURLException * @throws DocumentException */ public Document read(String fileName) throws MalformedURLException, DocumentException { SAXReader reader = new SAXReader(); Document document = reader.read(new File(fileName)); return document; } /** * get root element * @param doc * @return */ public Element getRootElement(Document doc){ return doc.getRootElement(); } /** * iterator all element by iterator * @param root */ public void IteratorAllElement(Element root){ for ( Iterator i = root.elementIterator(); i.hasNext(); ) { Element element = (Element) i.next(); System.out.println(element.getName() + "\n" + element.asXML()); } } /** * iterator specail element by name * @param root * @param elementName */ public void IteratorSpecialElement(Element root,String elementName){ for ( Iterator i = root.elementIterator(elementName); i.hasNext();) { Element element = (Element) i.next(); System.out.println(element.getName() + "\n" + element.asXML()); } } /** * iterator all attributes * @param root */ public void IteratorAttribute(Element root){ for ( Iterator i = root.attributeIterator(); i.hasNext(); ) { Attribute attribute = (Attribute) i.next(); System.out.println(attribute.getName() + "\n" + attribute.asXML()); } } /** * iterator all elements by recursion * @param doc */ public void treeWalk(Document doc) { treeWalk(getRootElement(doc)); } public void treeWalk(Element element) { for (int i = 0, size = element.nodeCount(); i < size; i++){ Node node = element.node(i); if (node instanceof Element) { treeWalk((Element) node); } else { System.out.println(node.asXML()); } } } public void selectSingleNodeTest(Document doc){ Node node = doc.selectSingleNode("//journal/article"); System.out.println("select single node " + node.asXML()); } public void selectNodesTest(Document document) { List list = document.selectNodes("//journal/article" ); for(Object node : list){ if(node instanceof Element){ ((Element) node).asXML(); } } } public void findLinks(Document document) throws DocumentException { List list = document.selectNodes("//a/@href"); for (Iterator iter = list.iterator(); iter.hasNext(); ) { Attribute attribute = (Attribute) iter.next(); String url = attribute.getValue(); System.out.println("url " + url); } } public Document stringToDocument(String str) throws DocumentException{ return DocumentHelper.parseText(str); } public Document createDocument() { Document document = DocumentHelper.createDocument();// create docment Element root = document.addElement("root");// create the root Element root.addElement("author")// create child Element .addAttribute("name", "James")// add attribute for the child Element .addAttribute("location", "UK") .addText("James Strachan") .addComment("This is the first author");// add text for the child Element root.addElement("author") .addAttribute("name", "Bob") .addAttribute("location", "US") .addText("Bob McWhirter"); System.out.println(document.asXML()); return document; } public void writeToFile(Document doc) throws IOException{ XMLWriter writer = new XMLWriter(new FileWriter("d:/output.xml")); writer.write(doc); writer.close(); } public void decorateOutputXML(Document doc) throws IOException{ FileWriter outputStream = new FileWriter("d:/output1.xml"); XMLWriter writer; OutputFormat format; format = OutputFormat.createPrettyPrint();//the default pretty printing format //format = OutputFormat.createCompactFormat();//default compact format //format = new OutputFormat("aaaa", false);// custom format writer= new XMLWriter(outputStream, format ); writer.write(doc); writer.close(); } public void moidfyXML(Document doc){ Element root = doc.getRootElement(); Attribute author = root.attribute("author");// select attribute root.remove(author);// remove attribute root.addAttribute("user", "user_kenny");// add new attribute } } class MyVisitor extends VisitorSupport { public void visit(Element element){ System.out.println("element " + element.getName()); } public void visit(Attribute attr){ System.out.println("atrribute " + attr.getName()); } public void visit(Node node){ System.out.println("node " + node.asXML()); } public void visit(Text text){ System.out.println("text " + text.asXML()); } public void visit(ProcessingInstruction pro){ System.out.println("ProcessingInstruction " + pro.asXML()); } public void visit(Namespace namespace){ System.out.println("Namespace " + namespace.asXML()); } public void visit(Comment comment){ System.out.println("Comment " + comment.asXML()); } public void visit(CDATA data){ System.out.println("CDATA " + data.asXML()); } public void visit(DocumentType docType){ System.out.println("DocumentType " + docType.asXML()); } public void visit(Document doc){ System.out.println("Document " + doc.asXML()); } }
相关推荐
Java解析XML时,dom4j是一个非常流行的库,它提供了灵活且强大的API来处理XML文档。dom4j-1.6.1.jar是这个库的一个版本,发布于2005年,它支持XML的读取、写入、操作以及查询功能。在本文中,我们将深入探讨dom4j的...
解析XML文件时,DOM4J提供了两种主要的方式:DOM阅读器和SAX阅读器。 - **DOM阅读器**:首先,通过`DocumentFactory.createDocument()`方法创建一个`Document`对象,然后使用`read()`方法读取XML文件,将整个XML...
在“jar包执行20190331.rar”文件中,可能包含了一个Java项目,该项目使用DOM4J库解析XML文件并执行相关业务逻辑。执行此类项目通常涉及以下步骤: 1. 将jar包解压,找到主类(包含main方法)。 2. 使用Java命令行...
Java 解析 XML 并导入数据库(DOM4J) Java 解析 XML 并导入数据库是指使用 Java 语言将 XML 文件解析并将其内容导入到数据库中。下面是使用 DOM4J 库来实现此功能的相关知识点: 一、XML 文件解析 XML...
Java提供了多种解析XML的API,包括SAX(Simple API for XML)、DOM(Document Object Model)以及DOM4J。下面我们将详细探讨这些解析方式及其在实际开发中的应用。 1. SAX解析器: SAX是一种基于事件驱动的解析器,...
### DOM4J解析XML详解 #### 一、DOM4J简介与特性 DOM4J是一个由dom4j.org开发的开源XML解析包,专为Java平台设计,它不仅支持DOM、SAX和JAXP标准,还巧妙地融入了Java集合框架,使其成为Java开发者在处理XML数据时...
Java DOM4J解析XML是一种常见的处理XML文档的技术,它提供了灵活且高效的API,使得开发者能够方便地读取、写入、修改以及操作XML文件。DOM4J是Java中一个非常强大的XML处理库,它结合了DOM、SAX和JDOM的优点,同时也...
要开始解析XML文件,首先需要导入DOM4J的相关包: ```java import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; ``` 接下来,我们将创建...
DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得XML的解析、创建、查询和修改变得简单。这个压缩包包含了DOM4J的完整版本,适用于那些希望在Java项目中使用DOM4J进行XML操作的开发者...
Java解析XML配置文件是开发过程中常见的一项任务,特别是在基于Java的框架中,如Spring,大量使用XML文件来存储配置信息。DOM4J是Java中一个非常流行且功能强大的XML处理库,它提供了丰富的API用于读取、写入、修改...
描述中提到的"java xml解析所需要的包",通常包括了DOM4J库和其他辅助库,如XStream。XStream是一个用于Java的XML序列化库,能够将Java对象直接转换为XML,反之亦然。这在需要将数据持久化到XML或者从XML中恢复数据...
DOM4J提供了对XML Schema的全面支持,允许开发者在解析XML文档时进行严格的模式验证,确保数据的准确性和一致性。这对于企业级应用尤为重要,因为它们往往需要处理大量的结构化数据。 **3. 基于事件的处理** 对于...
Java提供了多种解析XML的API,其中DOM(Document Object Model)和DOM4j是常用的两种方法。本文将详细介绍这两种方式以及如何使用它们进行XML文档的增、删、改查操作。 一、DOM解析 DOM解析器将整个XML文档加载到...
为了处理XML文档,Java提供了多种API,其中最常用的包括DOM、SAX、DOM4J和JDOM。以下是对这些方法的详细介绍: 1. DOM(Document Object Model) DOM是一种树形结构的API,它将整个XML文档加载到内存中,形成一个...
2. **基本用法**:在Java程序中,首先需要导入dom4j库,然后使用`DocumentBuilderFactory`创建`DocumentBuilder`,接着使用`DocumentBuilder`解析XML文件,得到`Document`对象。你可以通过`Document`对象获取XML的根...
JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML
1、xml文档解析 2、 dom4j解析xml 3、实现xml文件解析 xml字符串解析 xml MAP键值对解析 4、实现xml写入与生成文件
本文将深入探讨几种不同的XML解析方法,并通过实际的“Java解析XML性能对比分析Demo”来展示它们的性能差异。我们将讨论DOM、SAX、JDOM、DOM4J和JAXB这五种解析器,以及它们各自的特点和适用场景。 1. DOM(文档...