import java.io.File; import java.io.FileOutputStream; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; 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.XMLWriter; /** * @Title: TestDom4j.java * @Package * @Description: 解析xml字符串 * @author 无处不在 * @date 2012-11-20 下午05:14:05 * @version V1.0 */ public class TestDom4j { public static void readStringXml(String xml) { Document doc = null; try { // 读取并解析XML文档 // SAXReader就是一个管道,用一个流的方式,把xml文件读出来 // // SAXReader reader = new SAXReader(); //User.hbm.xml表示你要解析的xml文档 // Document document = reader.read(new File("User.hbm.xml")); // 下面的是通过解析xml字符串的 doc = DocumentHelper.parseText(xml); // 将字符串转为XML Element rootElt = doc.getRootElement(); // 获取根节点 System.out.println("根节点:" + rootElt.getName()); // 拿到根节点的名称 Iterator iter = rootElt.elementIterator("head"); // 获取根节点下的子节点head // 遍历head节点 while (iter.hasNext()) { Element recordEle = (Element) iter.next(); String title = recordEle.elementTextTrim("title"); // 拿到head节点下的子节点title值 System.out.println("title:" + title); Iterator iters = recordEle.elementIterator("script"); // 获取子节点head下的子节点script // 遍历Header节点下的Response节点 while (iters.hasNext()) { Element itemEle = (Element) iters.next(); String username = itemEle.elementTextTrim("username"); // 拿到head下的子节点script下的字节点username的值 String password = itemEle.elementTextTrim("password"); System.out.println("username:" + username); System.out.println("password:" + password); } } Iterator iterss = rootElt.elementIterator("body"); // /获取根节点下的子节点body // 遍历body节点 while (iterss.hasNext()) { Element recordEless = (Element) iterss.next(); String result = recordEless.elementTextTrim("result"); // 拿到body节点下的子节点result值 System.out.println("result:" + result); Iterator itersElIterator = recordEless.elementIterator("form"); // 获取子节点body下的子节点form // 遍历Header节点下的Response节点 while (itersElIterator.hasNext()) { Element itemEle = (Element) itersElIterator.next(); String banlce = itemEle.elementTextTrim("banlce"); // 拿到body下的子节点form下的字节点banlce的值 String subID = itemEle.elementTextTrim("subID"); System.out.println("banlce:" + banlce); System.out.println("subID:" + subID); } } } catch (DocumentException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } /** * @description 将xml字符串转换成map * @param xml * @return Map */ public static Map readStringXmlOut(String xml) { Map map = new HashMap(); Document doc = null; try { // 将字符串转为XML doc = DocumentHelper.parseText(xml); // 获取根节点 Element rootElt = doc.getRootElement(); // 拿到根节点的名称 System.out.println("根节点:" + rootElt.getName()); // 获取根节点下的子节点head Iterator iter = rootElt.elementIterator("head"); // 遍历head节点 while (iter.hasNext()) { Element recordEle = (Element) iter.next(); // 拿到head节点下的子节点title值 String title = recordEle.elementTextTrim("title"); System.out.println("title:" + title); map.put("title", title); // 获取子节点head下的子节点script Iterator iters = recordEle.elementIterator("script"); // 遍历Header节点下的Response节点 while (iters.hasNext()) { Element itemEle = (Element) iters.next(); // 拿到head下的子节点script下的字节点username的值 String username = itemEle.elementTextTrim("username"); String password = itemEle.elementTextTrim("password"); System.out.println("username:" + username); System.out.println("password:" + password); map.put("username", username); map.put("password", password); } } // 获取根节点下的子节点body Iterator iterss = rootElt.elementIterator("body"); // 遍历body节点 while (iterss.hasNext()) { Element recordEless = (Element) iterss.next(); // 拿到body节点下的子节点result值 String result = recordEless.elementTextTrim("result"); System.out.println("result:" + result); // 获取子节点body下的子节点form Iterator itersElIterator = recordEless.elementIterator("form"); // 遍历Header节点下的Response节点 while (itersElIterator.hasNext()) { Element itemEle = (Element) itersElIterator.next(); // 拿到body下的子节点form下的字节点banlce的值 String banlce = itemEle.elementTextTrim("banlce"); String subID = itemEle.elementTextTrim("subID"); System.out.println("banlce:" + banlce); System.out.println("subID:" + subID); map.put("result", result); map.put("banlce", banlce); map.put("subID", subID); } } } catch (DocumentException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return map; } public static void main(String[] args) { // 下面是需要解析的xml字符串例子 /* * String xmlString = "<html>" + "<head>" + "<title>dom4j解析一个例子</title>" * + "<script>" + "<username>yangrong</username>" + * "<password>123456</password>" + "</script>" + "</head>" + "<body>" + * "<result>0</result>" + "<form>" + "<banlce>1000</banlce>" + * "<subID>36242519880716</subID>" + "</form>" + "</body>" + "</html>"; */ /* * Map map = readStringXmlOut(xmlString); Iterator iters = * map.keySet().iterator(); while (iters.hasNext()) { String key = * iters.next().toString(); // 拿到键 String val = map.get(key).toString(); * // 拿到值 System.out.println(key + "=" + val); } */ // readStringXml(xmlString); String xmlString = "<?xml version=\"1.0\" encoding=\"utf-8\"?><message><result><classifies><classify id=\"PS_ConstructDesignAudit\" name=\"主网项目:施工图审批\" count=\"13\"><record index=\"1\"><title></title><assigner></assigner><assignDate></assignDate><url>http://10.10.5.5:7009/web/ssoLogin.do?modelUrl=%2Flcam%2Fproject%2Fprojectplan%2Fconstructdesign%2FConstructDesignTab.jsp%3FtagFlag%3DtodoTag%26pDesktop%3Dyes%26nodeString%3Dnull%3Anull%3BPS_ConstructDesignAudit%3B000137%26pMenu%3Dyes%26projectType%3D1%26moduleId%3DCSG_ConstructDesign</url></record><record index=\"2\"><title></title><assigner></assigner><assignDate></assignDate><url>http://10.10.5.5:7009/web/ssoLogin.do?modelUrl=%2Flcam%2Fproject%2Fprojectplan%2Fconstructdesign%2FConstructDesignTab.jsp%3FtagFlag%3DtodoTag%26pDesktop%3Dyes%26nodeString%3Dnull%3Anull%3BPS_ConstructDesignAudit%3B000137%26pMenu%3Dyes%26projectType%3D1%26moduleId%3DCSG_ConstructDesign</url></record></classify></classifies><totalCount>61</totalCount></result></message>"; try { Document document = DocumentHelper.parseText(xmlString); // 输出操作 // OutputFormat format = OutputFormat.createPrettyPrint() ; //实例化 // format.setEncoding("GBK") ; // XMLWriter writer = new XMLWriter(new FileOutputStream(new // File("d:" + File.separator + "dom4j_demo.xml")),format) ; // writer.write(docment) ; // 进行输出 // writer.close() ; List listNodes = document .selectNodes("message/result/classifies/classify"); for (int i = 0; i < listNodes.size(); i++) { // 获取classify Element element = (Element) listNodes.get(i); // 获取record for (Iterator it = element.elementIterator("record"); it .hasNext();) { Element temp = (Element) it.next(); System.out.println(temp.element("url").getText()); break; } } } catch (Exception e) { e.printStackTrace(); } } }
相关推荐
### DOM4J解析实例分析 DOM4J是一个用于处理XML的Java库,它提供了一种简单、高效的方式来读取、写入和修改XML文件。与Java标准库中的DOM API相比,DOM4J提供了更简洁的API,使得XML的处理变得更加直观和方便。本文...
在这个实例中,我们将深入探讨如何使用DOM4J解析XML文件,并通过`Dom4jTest1.java`这个示例程序来理解其工作原理。 首先,我们需要了解XML(Extensible Markup Language)是一种标记语言,常用于存储和传输数据。...
**DOM4J解析XML实例详解** 在Java编程中,处理XML文档是一项常见的任务。DOM4J是一个非常流行的、强大的Java XML API,它提供了灵活且高效的方式来解析、创建、修改XML文档。本文将深入探讨如何使用DOM4J进行XML...
在本教程中,我们将深入探讨如何使用DOM4J解析(读取)XML节点数据,不受XML层级的限制。 首先,确保你已经下载了必要的依赖,即DOM4J库。通常,这将是一个名为`dom4j-x.x.x.jar`的文件,其中x.x.x是DOM4J的版本号...
本教程将深入探讨XML DOM4J解析的相关知识点。 一、DOM4J基本概念 DOM4J是一种灵活的Java API,其设计目标是简化XML处理,提供高效且易于使用的API。与标准的DOM(Document Object Model)相比,DOM4J更轻量级,...
### DOM4J解析XML知识点详解 #### 一、DOM4J简介 DOM4J(Document Object Model for XML)是一款用于处理XML文档的轻量级Java库。它提供了一种非常简单且灵活的方式来创建、读取、修改和删除XML文档。DOM4J的主要...
以下是如何使用DOM4j解析XML: 1. 引入DOM4j库(如:dom4j-1.6.1.jar)。 2. 创建DocumentFactory实例。 3. 使用DocumentFactory的read()方法读取XML文件,得到Document对象。 4. 使用Document对象提供的方法(如...
在使用DOM4J解析XML文件之前,需要导入DOM4J相关的jar包,通常版本为1.6.1。 #### DOM4J常用对象 - **SAXReader**: 用于读取XML文件,并将其转换成Document对象。 - **Document**: XML文档对象树,类似于HTML文档...
dom4j解析xml字符串实例
2. **DOM4J解析方式**: DOM4J是一个Java库,提供了更灵活和高效的XML处理功能,相比DOM,DOM4J提供了更丰富的API和更好的性能。它同样基于DOM模型,但提供了更友好的接口,适合处理大型XML文件。 3. **DOM4J解析...
**DOM4J解析XML** DOM4J是一个Java库,它为处理XML提供了强大的功能,包括读取、写入、修改和操作XML文档。这个库以其灵活性、效率和易用性而受到开发者的青睐。DOM4J是基于DOM(Document Object Model)的,但它...
【使用dom4j解析XML】 dom4j是一个强大的开源XML框架,它提供了处理XML文档的各种功能,包括解析、创建、修改等。相比W3C DOM API,dom4j的优势在于其内置的XPath支持,允许更方便地定位和操作XML文档中的节点。 *...
1. **创建Document对象**:这是DOM4J解析XML文档的基础,可以使用`DocumentFactory`类的`createDocument()`方法创建。 2. **加载XML字符串或文件**:我们可以从WebService接口获取到XML响应,将其转换为`String`,...
下面我们将深入探讨DOM4J解析XML的基本概念、使用方法以及它与其他XML解析器的比较。 XML(eXtensible Markup Language)是一种标记语言,广泛应用于数据交换、配置文件和文档结构化存储。DOM4J是基于DOM(Document...
通过这种方式,我们可以利用DOM4J解析XML文件,同时借助Java反射机制将解析结果动态地映射到自定义的Java类中。这在处理XML数据时提供了很大的灵活性,尤其在需要将XML数据与业务对象关联时,反射机制显得尤为重要。
使用DOM4J解析XML示例: ```java File inputFile = new File("input.xml"); SAXReader reader = new SAXReader(); Document document = reader.read(inputFile); ``` 4. **XPath查询** DOM4J支持XPath表达式...
2. **Dom4J解析XML**:首先,通过`DocumentBuilderFactory`创建`DocumentBuilder`,然后用`parse()`方法解析XML文件。解析后,可以使用Dom4J的API遍历和修改DOM树。 3. **Dom4J操作XML**:例如,可以使用`Element`类...
在本实例中,我们将深入探讨如何使用DOM4J解析XML,并利用这些数据连接Oracle数据库进行数据操作。 首先,让我们了解DOM4J的基本用法。DOM4J的主要类包括`Document`、`Element`、`Attribute`和`Namespace`。`...
本篇将通过一个实际的例子来探讨如何使用Dom4j解析XML配置文件。 首先,我们需要了解DOM4J的基本概念。DOM(Document Object Model)是一种用于表示XML或HTML文档的标准模型,而Dom4j是基于DOM的,但它比标准的DOM...