日期:2014-05-20  浏览次数:20823 次

java jom4j读取XML
现在想做个读取XML的java方法

在一个很大的xml文件中
<root>
<a>
 <b>
  <C1></C1>
 </b>
</a>

<a>
 <b>
  <C2></C2>
 </b>
</a>
</root>

以<a></a>为循环体,输出<c1>的value值。

给个例子

------解决方案--------------------
XML文件:
<?xml version="1.0" encoding="GBK"?>
<doc>
<personid="1" sex="m">
<name>zhangsan</name>
<age>32</age>
<adds>
<addcode="home">home add</add>
<addcode="com">com add</add>
</adds>
</person>
<personid="2" sex="w">
<name>lisi</name>
<age>22</age>
<adds>
<addID="22" id="23" code="home">home add</add>
<addID="23" id="22" code="com">com add</add>
<addid="24" code="com">com add</add>
</adds>
</person>
</doc>
 
 
解析代码:
package com.topsoft.test;

import org.dom4j.io.SAXReader;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;

import java.util.Iterator;
import java.util.List;
import java.io.InputStream;

/**
* Created by IntelliJ IDEA.<br>
* <b>User</b>: leizhimin<br>
* <b>Date</b>: 2008-3-26 15:53:51<br>
* <b>Note</b>: Dom4j遍历解析XML测试
*/
public class TestDom4j {
/**
* 获取指定xml文档的Document对象,xml文件必须在classpath中可以找到
*
* @param xmlFilePath xml文件路径
* @return Document对象
*/
public static Document parse2Document(String xmlFilePath) {
SAXReader reader = new SAXReader();
Document document = null;
try {
InputStream in = TestDom4j.class.getResourceAsStream(xmlFilePath);
document = reader.read(in);
} catch (DocumentException e) {
System.out.println(e.getMessage());
System.out.println("读取classpath下xmlFileName文件发生异常,请检查CLASSPATH和文件名是否存在!");
e.printStackTrace();
}
return document;
}

public staticvoid testParseXMLData(String xmlFileName) {
//产生一个解析器对象
SAXReader reader = new SAXReader();
//将xml文档转换为Document的对象
Document document = parse2Document(xmlFileName);
//获取文档的根元素
Element root = document.getRootElement();
//定义个保存输出xml数据的缓冲字符串对象
StringBuffer sb = new StringBuffer();
sb.append("通过Dom4j解析XML,并输出数据:\n");
sb.append(xmlFileName + "\n");
sb.append("----------------遍历start----------------\n");
//遍历当前元素(在此是根元素)的子元素
for (Iterator i_pe = root.elementIterator(); i_pe.hasNext();) {
Element e_pe = (Element) i_pe.next();
//获取当前元素的名字
String person = e_pe.getName();
//获取当前元素的id和sex属性的值并分别赋给id,sex变量
String id = e_pe.attributeValue("id");
String sex = e_pe.attributeValue("sex");
String name = e_pe.element("name").getText();
String age = e_pe.element("age").getText();
//将数据存放到缓冲区字符串对象中
sb.append(person + ":\n");
sb.append("\tid=" + id + " sex=" + sex + "\n");