XML之dom4j实用例子

前端之家收集整理的这篇文章主要介绍了XML之dom4j实用例子前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

XML之dom4j

dom4j解析xml文档的大致步骤

第一步. 使用 org.dom4j.io.SAXReader 类的read(String fileName)方法读取并解析xml文档,返回org.dom4j.Document 接口的一个对象;

<!-- lang: java -->

// 实例化SAXReader对象,调用read()方法读取XML文档,返回XML文档
SAXReader reader = new SAXReader();
Document doc = reader.read(new File(fileName));
第二步.取得根节点,返回org.dom4j.Element 接口的一个对象;

<!-- lang: java -->
//获取ROOT(根)节点
Element root = doc.getRootElement();
第三步 . 遍历XML树(枚举(Iterator)、递归 、Visitor模式),上面的代码用了下面的方式实现。

<!-- lang: java -->

// 枚举所有子节点
for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
Element el = (Element) i.next();
// do something
}
============ 结合上面的实例整理一些dom4j解析xml的常用API ===============

获取子节点的两种方法:element(String name)和elements(String name)

1 . 文档中 price 、description 、calories 这三个标签在根节点中的名称都是唯一的,因此可以用element();

<!-- lang: java -->
//获取<price> 、<description> 、<calories>节点
Element price = el.element("price");
Element calories = el.element("calories");
Element description = el.element("description");
2 . 而 name 标签在根节点下并不是唯一的,需要用elements(),并且用List接受

<!-- lang: java -->
//获取所有<name>节点
List<Element> list = el.elements("name");
org.dom4j.Element接口下几个常用方法

1 . getName()方法,用于返回节点名称

<!-- lang: java -->
//取得<price>的节点名
Element price = el.element("price");
System.out.println("标签名为:"+price.getName()); //结果为:price
2 . getText() 方法 ,用于返回节点值。

<!-- lang: java -->
//取得<price>的节点值
Element price = element.element("price");
System.out.println("该节点值为:"+price.getText()); //第一次结果为:$1.95
3 . attributes方法, 返回该元素的属性列表

<!-- lang: java -->
//取得<calories unit="kCal">中的属性列表,若有多个用get(i)依次获取
Element calories = element.element("calories");
Attribute ca = (Attribute) calories.attributes().get(0); //取得第一个节点属性
4 . attributeValue(String name),根据传入的属性获取属性

<!-- lang: java -->
//取得<calories unit="kCal">中的unti属性的值
Element calories = element.element("calories");
System.out.println("属性unit的值为:"+calories.attributeValue("unit"));//结果为:kCal
5 . getParent(),返回一个父元素

<!-- lang: java -->

Element description = el.element("description");
System.out.println("该父元素为:"+description.getParent().getName()); //结果为food
org.dom4j.Attribute 接口下的两个方法

1 . getName() 获取属性名 getValue() 获取属性

<!-- lang: java -->
//获取<calories unit="kCal">中的属性名和属性对应的值
Element calories = el.element("calories ");
Attribute ca =(Attribute)calories.attributes().get(0);
System.out.println(ca.getName()+":"+ca.getValue()); 第一次结果为:unit:kCal


例一XML:
<?xml version="1.0" encoding="GB2312"?>
<RESULT>
<VALUE>
  <NO>A1234</NO>
  <ADDR>四川省XX县XX镇XX路X段XX号</ADDR>
</VALUE>
<VALUE>
  <NO>B1234</NO>
  <ADDR>四川省XX市XX乡XX村XX组</ADDR>
</VALUE>
</RESULT>
java:
package www.yq.com.src;

import java.io.File;
import java.util.Iterator;

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

/**
* @Project XMLSimpleTest
* @File MyDom4jXmlReader.java
* @Package www.yq.com.src
* @Date 2016年1月26日 上午11:52:01
* @Author
* @email
*/
public class MyDom4jXmlReader {
public static void main(String[] args) throws DocumentException {
File f = new File("E:\\qi.xml");
SAXReader reader = new SAXReader();
Document document = reader.read(f);
Element rootElement = document.getRootElement();
for (Iterator iterator = rootElement.elementIterator(); iterator.hasNext();) {
Element node = (Element) iterator.next();
System.out.println("车牌号:"+node.elementText("NO"));
System.out.println("车牌地址:"+node.elementText("ADDR"));
}

}
}
例二:
<!-- lang: xml -->
<?xml version="1.0" encoding="GBK"?>
<breakfast_menu>
<!--这是根节点-->
<food>
<name>hamburger</name>
<name>汉堡包</name>
<price currency="dollar">$1.95</price>
<description>A sandwich made with a patty bun......</description>
<calories unit="kCal">260</calories>
</food>
<food>
<name>Strawberry Belgian Waffles</name>
<name>华夫饼 </name>
<price currency="dollar">$7.95</price>
<description>light Belgian waffles covered...</description>
<calories unit="kCal">900</calories>
</food>
<food>
<name>Berry-Berry Belgian Waffles</name>
<name>不知道什么鸟东西 </name>
<price currency="dollar">$8.95</price>
<description>为了美观描述就写少点了 ......</description>
<calories unit="kCal">900</calories>
</food>
</breakfast_menu>

<!-- lang: java -->
import java.io.File;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Dom4jTest {
public static void main(String[] args) throws Exception {
// 从文件读取XML,输入文件名,返回XML文档
File file = new File("E:"+File.separator+"001.xml");
SAXReader reader = new SAXReader();
Document doc = reader.read(file);
Element root = doc.getRootElement(); //获取根节点

for (Iterator i = root.elementIterator(); i.hasNext(); ) {
Element el = (Element) i.next();

List<Element> list = el.elements("name");
System.out.println(list.get(0).getName()+":"+list.get(0).getText());
System.out.println(list.get(1).getName()+":"+list.get(1).getText());

Element price = el.element("price");
System.out.println("标签名为:"+price.getName());
System.out.println("该节点值为:"+price.getText());

Element description = el.element("description");
System.out.println("该父元素为:"+description.getParent().getName());
System.out.println(description.getNodeType());

Element calories = el.element("calories");
Attribute ca = (Attribute) calories.attributes().get(0); //取得节点属性
System.out.println(ca.getName()+":"+ca.getValue());
System.out.println("属性unit的值为:"+calories.attributeValue("unit"));

System.out.println("========================="); } } }

猜你在找的XML相关文章