`
forlab
  • 浏览: 133594 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

dom4j解析实例

    博客分类:
  • DOM
 
阅读更多
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解析实例分析 DOM4J是一个用于处理XML的Java库,它提供了一种简单、高效的方式来读取、写入和修改XML文件。与Java标准库中的DOM API相比,DOM4J提供了更简洁的API,使得XML的处理变得更加直观和方便。本文...

    dom4j 解析xml实例

    在这个实例中,我们将深入探讨如何使用DOM4J解析XML文件,并通过`Dom4jTest1.java`这个示例程序来理解其工作原理。 首先,我们需要了解XML(Extensible Markup Language)是一种标记语言,常用于存储和传输数据。...

    dom4j解析xml实例

    **DOM4J解析XML实例详解** 在Java编程中,处理XML文档是一项常见的任务。DOM4J是一个非常流行的、强大的Java XML API,它提供了灵活且高效的方式来解析、创建、修改XML文档。本文将深入探讨如何使用DOM4J进行XML...

    dom4j 解析(读取) xml 节点数据

    在本教程中,我们将深入探讨如何使用DOM4J解析(读取)XML节点数据,不受XML层级的限制。 首先,确保你已经下载了必要的依赖,即DOM4J库。通常,这将是一个名为`dom4j-x.x.x.jar`的文件,其中x.x.x是DOM4J的版本号...

    xmldom4j解析

    本教程将深入探讨XML DOM4J解析的相关知识点。 一、DOM4J基本概念 DOM4J是一种灵活的Java API,其设计目标是简化XML处理,提供高效且易于使用的API。与标准的DOM(Document Object Model)相比,DOM4J更轻量级,...

    dom4j解析xml.txt

    ### DOM4J解析XML知识点详解 #### 一、DOM4J简介 DOM4J(Document Object Model for XML)是一款用于处理XML文档的轻量级Java库。它提供了一种非常简单且灵活的方式来创建、读取、修改和删除XML文档。DOM4J的主要...

    分别使用DOM和DOM4j解析XML文件

    以下是如何使用DOM4j解析XML: 1. 引入DOM4j库(如:dom4j-1.6.1.jar)。 2. 创建DocumentFactory实例。 3. 使用DocumentFactory的read()方法读取XML文件,得到Document对象。 4. 使用Document对象提供的方法(如...

    DOM4J解析XML代码

    在使用DOM4J解析XML文件之前,需要导入DOM4J相关的jar包,通常版本为1.6.1。 #### DOM4J常用对象 - **SAXReader**: 用于读取XML文件,并将其转换成Document对象。 - **Document**: XML文档对象树,类似于HTML文档...

    dom4j解析xml字符串实例

    dom4j解析xml字符串实例

    使用dom4j 和本地dom 解析xml 文件

    2. **DOM4J解析方式**: DOM4J是一个Java库,提供了更灵活和高效的XML处理功能,相比DOM,DOM4J提供了更丰富的API和更好的性能。它同样基于DOM模型,但提供了更友好的接口,适合处理大型XML文件。 3. **DOM4J解析...

    dom4j解析xml

    **DOM4J解析XML** DOM4J是一个Java库,它为处理XML提供了强大的功能,包括读取、写入、修改和操作XML文档。这个库以其灵活性、效率和易用性而受到开发者的青睐。DOM4J是基于DOM(Document Object Model)的,但它...

    使用dom4j解析XML

    【使用dom4j解析XML】 dom4j是一个强大的开源XML框架,它提供了处理XML文档的各种功能,包括解析、创建、修改等。相比W3C DOM API,dom4j的优势在于其内置的XPath支持,允许更方便地定位和操作XML文档中的节点。 *...

    webService 短信接口 dom4j解析

    1. **创建Document对象**:这是DOM4J解析XML文档的基础,可以使用`DocumentFactory`类的`createDocument()`方法创建。 2. **加载XML字符串或文件**:我们可以从WebService接口获取到XML响应,将其转换为`String`,...

    dom4j解析XML所需要的包

    下面我们将深入探讨DOM4J解析XML的基本概念、使用方法以及它与其他XML解析器的比较。 XML(eXtensible Markup Language)是一种标记语言,广泛应用于数据交换、配置文件和文档结构化存储。DOM4J是基于DOM(Document...

    dom4j解析xml,利用反射机制

    通过这种方式,我们可以利用DOM4J解析XML文件,同时借助Java反射机制将解析结果动态地映射到自定义的Java类中。这在处理XML数据时提供了很大的灵活性,尤其在需要将XML数据与业务对象关联时,反射机制显得尤为重要。

    dom4j dom4j实例

    使用DOM4J解析XML示例: ```java File inputFile = new File("input.xml"); SAXReader reader = new SAXReader(); Document document = reader.read(inputFile); ``` 4. **XPath查询** DOM4J支持XPath表达式...

    Dom4J与SAX解析实例

    2. **Dom4J解析XML**:首先,通过`DocumentBuilderFactory`创建`DocumentBuilder`,然后用`parse()`方法解析XML文件。解析后,可以使用Dom4J的API遍历和修改DOM树。 3. **Dom4J操作XML**:例如,可以使用`Element`类...

    dom4j解析xml,连接oracle数据库

    在本实例中,我们将深入探讨如何使用DOM4J解析XML,并利用这些数据连接Oracle数据库进行数据操作。 首先,让我们了解DOM4J的基本用法。DOM4J的主要类包括`Document`、`Element`、`Attribute`和`Namespace`。`...

    Dom4j解析配置文件与xml小例子

    本篇将通过一个实际的例子来探讨如何使用Dom4j解析XML配置文件。 首先,我们需要了解DOM4J的基本概念。DOM(Document Object Model)是一种用于表示XML或HTML文档的标准模型,而Dom4j是基于DOM的,但它比标准的DOM...

Global site tag (gtag.js) - Google Analytics