XML(二)

DOM4J

特点:

        开源、易用

        应用于Java平台

        使用大量接口

Document:定义XML文档

Element:定义XML元素

Text:定义XML文本节点

Attribute:定义了XML 的属性

……

练习02:使用DOM4J解析XML文件

显示手机收藏信息

保存手机收藏信息

为手机收藏信息添加新的节点

修改/删除手机收藏信息节点

收藏文件

<?xml version="1.0" encoding="GBK"?>

<PhoneInfo> 
  <Brand name="华为"> 
    <Type name="U8650"/>  
    <Type name="HW123"/>  
    <Type name="HW321"/> 
  </Brand>  
  <Brand name="苹果"> 
    <Type name="iPhone4"/> 
  </Brand>  
  <Brand name="三星">
    <Type name="Note4"/>
  </Brand>
</PhoneInfo>

 DOM4J解析文件(显示、保存、添加、修改、删除合一)

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

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;



public class Dom4j {

	public static Document doc;
	
	public static void main(String[] args) {
		loadDocument();
//		showPhoneInfo();
		addNewPhoneInfo();
//		saveXML("新收藏.xml");
//		updatePhoneInfo();
//		deleteItem();
		showPhoneInfo();
	}

	public static void loadDocument(){
		try{
			SAXReader saxReader = new SAXReader();
			doc = saxReader.read(new File("新收藏.xml"));
		}catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	public static void updatePhoneInfo(){
		// 获取XML的根节点
		Element root = doc.getRootElement();
		int id = 0;
		for (Iterator itBrand = root.elementIterator(); itBrand.hasNext();) {
			Element brand = (Element) itBrand.next();
			id++;
			brand.addAttribute("id", id + "");
		}

		saveXML("src/收藏信息.xml");

	}
	
	public static void deleteItem(){
		// 获取XML的根节点
		Element root = doc.getRootElement();
		int id = 0;
		for (Iterator itBrand = root.elementIterator(); itBrand.hasNext();) {
			Element brand = (Element) itBrand.next();
			if (brand.attributeValue("name").equals("华为")) {
				brand.getParent().remove(brand);
			}
		}
//		saveXML("src/收藏信息.xml");			
	}
	
	public static void showPhoneInfo() {
		// 获取XML的根节点
		Element root = doc.getRootElement();
		// 遍历所有的Brand标签
		for (Iterator itBrand = root.elementIterator(); itBrand.hasNext();) {
			Element brand = (Element) itBrand.next();
			// 输出标签的name属性
			System.out.println("品牌:" + brand.attributeValue("name"));
			// 遍历Type标签
			for (Iterator itType = brand.elementIterator(); itType.hasNext();) {
				Element type = (Element) itType.next();
				// 输出标签的name属性
				System.out.println("\t型号:" + type.attributeValue("name"));
			}
		}

	}
	
	public static void saveXML(String path){
		try {
			OutputFormat format = OutputFormat.createPrettyPrint();
			format.setEncoding("GBK"); // 指定XML编码
			XMLWriter writer;
			writer = new XMLWriter(new FileWriter(path), format);
			writer.write(doc);
			writer.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static void addNewPhoneInfo(){
		// 获取XML的根节点
		Element root = doc.getRootElement();
		// 创建Brand标签
		Element el = root.addElement("Brand");
		// 给Brand标签设置属性
		el.addAttribute("name", "三星");
		// 创建Type标签
		Element typeEl = el.addElement("Type");
		// 给Type标签设置属性
		typeEl.addAttribute("name", "Note4");
		saveXML("新收藏.xml");
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值