xml的解析三

前端之家收集整理的这篇文章主要介绍了xml的解析三前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

使用dom4j查询xml

dom4j,是一个组织,针对xml解析,提供解析器 dom4j

dom4j不是javase的一部分,需要导入dom4j提供jar包

案例:

<?xml version="1.0" encoding="UTF-8"?>

<person> 
  <p1 id1="aaa"> 
    <name>张三</name>  
    <age>20</age>  
  </p1>  
  <p1 id2="bbb"> 
    <name>李四</name>  
    <age>30</age> 
  </p1>  
  <p1 id3="ccc"> 
    <name>王五</name>  
    <age>40</age> 
  </p1>  
  <p1 id4="ddd"> 
    <name>赵六</name>  
    <age>50</age> 
  </p1> 
</person>
package com.java.xml;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

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.SAXReader;
import org.dom4j.io.XMLWriter;

public class TestDom4j {

	public static void main(String[] args) throws DocumentException,IOException {
//		selectName();
//		selectSingle();
//		addSex();
//		addAgeBefore();
//		modifyAge();
//		deleteSchool();
		getValues();
	}
	/**
	 * 获取第一个p1里面的属性id1的值
	 * @throws DocumentException 
	 */
	private static void getValues() throws DocumentException {
		/*
		 * 1.创建解析器
		 * 2.得到document
		 * 3.获取第一个p1元素
		 * 4.得到p1里面的属性值
		 */
		//创建解析器
		SAXReader saxReader = new SAXReader();
		//得到document
		Document document = saxReader.read("src/person.xml");
		//获取第一个p1元素
		Element root = document.getRootElement();
		Element p1 = root.element("p1");
		//得到p1里面的属性值
		String str = p1.attributeValue("id1");
		System.out.println(str);
	}
	/**
	 * 删除第一个p1下面的<school>ecit</school>元素
	 * @throws IOException 
	 * @throws DocumentException 
	 */
	private static void deleteSchool() throws IOException,DocumentException {
		/*
		 * 1.创建解析器
		 * 2.得到document
		 * 3.得到根节点
		 * 4.得到第一个p1元素
		 * 5.得到p1元素下的school元素
		 * 6.使用p1删除school元素
		 * 7.回写xml
		 */
		//创建解析器
		SAXReader saxReader = new SAXReader();
		//得到document
		Document document = saxReader.read("src/person.xml");
		//得到根节点
		Element root = document.getRootElement();
		//得到第一个p1元素
		Element p1 = root.element("p1");
		//得到school元素
		Element school = p1.element("school");
		//删除school
		p1.remove(school);
		//回写xml
		OutputFormat format = OutputFormat.createPrettyPrint();
		XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/person.xml"),format);
		xmlWriter.write(document);
		xmlWriter.close();
	}
	/**
	 * 修改第一个p1下面的age元素的值 <age>30</age>
	 * @throws DocumentException 
	 * @throws IOException 
	 */
	private static void modifyAge() throws DocumentException,IOException {
		/*
		 * 1.创建解析器
		 * 2.得到document
		 * 3.得到根节点
		 * 4.得到第一个p1元素
		 * 5.得到第一个p1元素下面的age元素
		 * 6.修改age的值
		 * 7.回写xml
		 */
		//创建解析器
		SAXReader saxReader = new SAXReader();
		//得到document
		Document document = saxReader.read("src/person.xml");
		//得到根节点
		Element root = document.getRootElement();
		//得到第一个p1
		Element p1 = root.element("p1");
		//得到p1下面的age元素
		Element age = p1.element("age");
		//修改age元素的值
		age.setText("30");
		//回写xml
		OutputFormat format = OutputFormat.createPrettyPrint();
		XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/person.xml"),format);
		xmlWriter.write(document);
		xmlWriter.close();
	}
	/**
	 * 在第一个p1下面的age标签之前添加 <school>ecit.edu.cn</schlool>
	 * @throws DocumentException 
	 * @throws IOException 
	 */
	private static void addAgeBefore() throws DocumentException,IOException {
		/*
		 * 1.创建解析器
		 * 2.得到document
		 * 3.获取根节点
		 * 4.获取第一个p1
		 * 5.获取p1下面的所有元素
		 * 		elements方法返回list
		 * 		使用list里面的方法,在特定位置添加元素
		 * 		创建元素,在元素下面创建文本
		 * 			add(int index,E element)
		 * 			第一个参数是	位置	下标	从0开始
		 * 			第二个参数是	要添加的元素
		 * 6.回写xml
		 */
		//创建解析器
		SAXReader saxReader = new SAXReader();
		//得到document
		Document document = saxReader.read("src/person.xml");
		//获取根节点
		Element root = document.getRootElement();
		//获取第一个p1
		Element p1 = root.element("p1");
		//获取p1下面所遇元素
		List<Element> list = p1.elements();
		//创建元素使用
		Element school = DocumentHelper.createElement("school");
		//在school下面创建文本
		school.setText("石牌小学");
		//在特定位置添加
		list.add(1,school);
		//回写xml
		OutputFormat format = OutputFormat.createPrettyPrint();
		XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/person.xml"),format);
		xmlWriter.write(document);
		xmlWriter.close();
	}
	/**
	 * 在第一个p1标签末尾添加一个元素 <sex>nv</sex>
	 * @throws DocumentException 
	 * @throws IOException 
	 */
	private static void addSex() throws DocumentException,IOException {
		/*
		 * 1.创建解析器
		 * 2.得到document
		 * 3.得到根节点
		 * 4.获取第一个p1
		 * 5.在p1下面添加元素
		 * 6.在添加完成之后的元素下面添加文本
		 * 7.回写xml
		 */
		//创建解析器
		SAXReader saxReader = new SAXReader();
		//得到document
		Document document = saxReader.read("src/person.xml");
		//得到根节点
		Element root = document.getRootElement();
		//获取第一个p1
		Element p1 = root.element("p1");
		//在p1下面直接添加sex元素
		Element sex = p1.addElement("sex");
		//在sex中添加值
		sex.setText("nv");
		//回写xml
		OutputFormat format = OutputFormat.createPrettyPrint();
		XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/person.xml"),format);
		xmlWriter.write(document);
		xmlWriter.close();
	}
	/**
	 * 获取到一个name元素里面的值
	 * @throws DocumentException 
	 */
	private static void selectSingle() throws DocumentException {
		/*
		 * 1.创建解析器
		 * 2.得到document
		 * 3.得到根节点
		 * 4.得到第一个p1元素
		 * 5.得到p1下面的name元素
		 * 6.得到name元素的值
		 */
		//创建解析器
		SAXReader saxReader = new SAXReader();
		//得到document
		Document document = saxReader.read("src/person.xml");
		//得到根节点
		Element root = document.getRootElement();
		//得到第一个p1元素
//		Element p1 = root.element("p1");
		//得到第三个p1元素
		List<Element> list = root.elements("p1");
		Element p1 = list.get(2);
		//得到p1下面的name元素
		Element name = p1.element("name");
		//获取name元素的值
		String str = name.getText();
		System.out.println(str);
	}
	/**
	 * 查询xml中所有name元素的值
	 * @throws DocumentException 
	 */
	private static void selectName() throws DocumentException {
		/*
		 * 1.创建解析器
		 * 2.得到document
		 * 3.得到根节点
		 * 4.得到p1
		 * 5.得到p1下面的name元素
		 * 6.得到name元素的值
		 */
		//创建解析器
		SAXReader saxReader = new SAXReader();
		//得到document
		Document document = saxReader.read("src/person.xml");
		//得到根节点
		Element root = document.getRootElement();
		//得到p1
		List<Element> list = root.elements("p1");
		//遍历list
		for (Element element : list) {
			//element是每一个p1元素,得到p1下面的name元素
			Element name = element.element("name");
			//得到name元素的值
			String str = name.getText();
			System.out.println(str);
		}
	}
	
}
原文链接:https://www.f2er.com/xml/294827.html

猜你在找的XML相关文章