十九、XML工具DOM4J

DOM4J

  • Document:定义XML文档
  • Element:定义XML元素
  • Text:定义XML文本节点
  • Attribute:定义了XML的属性

接收XML:

  1. SAXReader reader = new SAXReader(); // 创建SAXReader对象
  2. read(File file) : Document // 得到XML的文档信息

读取XML信息:

  1. getRootElement() ; Element // 获得XML的根元素
    element.elementIterator() : iterator // 创建迭代器获得所有子节点
  2. while(hasNext()) // 遍历子节点
  3. (Element)xxx.next(); // 将指针找到的节点强转为元素
  4. attributeValue(String str) : String // 得到对应元素属性的字符串
  5. xxx.elementIterator() : Iterator // 获得子元素的下级元素重复2-4

添加元素:

  1. getRootElement() ; Element // 获得XML的根元素
  2. addElement(String str) : Element // 添加子节点
  3. addAttribute(String str1, String str2) : Element // 添加子节点的属性

修改元素:

  1. getRootElement() ; Element // 获得XML的根元素
  2. elementIterator(String str) : Iterator // 获得要修改的节点的迭代器
  3. while(hasNext()) // 遍历子节点
  4. (Element)xxx.next(); // 将指针找到的节点强转为元素
  5. addAttribute(String str1, String str2) : Element // 添加子节点的属性
  6. Attribute(String str) : Attribute // 获得元素的属性
  7. remove(Attribute) : Boolean // 删除元素的属性

删除元素:

  1. getRootElement() ; Element // 获得XML的根元素
  2. elementIterator(String str) : Iterator // 获得要删除的节点的迭代器
  3. while(hasNext()) // 遍历子节点
  4. (Element)xxx.next(); // 将指针找到的节点强转为元素
  5. if(attributeValue(Stirng str).equals(“String str”)) //判断是否为要删除的元素
  6. getParent() : Element // 获得父节点
  7. getParent().remove(Element) : Boolean // 用父节点删除子节点

保存Document:

  1. OutputFormat.createPrattyPrint() : OutputFormat // 创建格式化对象
  2. setEncoding(String str) : void // 设置XML的编码格式
  3. setIndent(String str) : void // 设置缩进
  4. new XMLWriter(OutputStream out, OutputFormat format) // 构造写入对象
  5. write(Document arg) : void // 写入XML文件

示例:

/**
 * Dom4j的使用
 * @author 周太阳
 * @version 1.0
 * 2019年5月1日 下午8:40:28
 */
public class Dom4jDemo {
	// 创建dom4j的Document属性
	private Document document;
	// 得到Document对象
	public void getDocument() {
		// 创建dom4j解析器
		SAXReader reader = new SAXReader(); 
		// 读入XML文件
		try {
			document = reader.read(new File("src/kgc/may/first/dom4j/收藏信息.xml"));
		} catch (DocumentException e) {
			e.printStackTrace();
		}
		
	}
	/**
	 * 显示XML的信息
	 */
	public void showInfo() {
		// 获得根目录的所有元素
		Element root = document.getRootElement();
		// 创建迭代器获得所有brand
		Iterator eleBrand = root.elementIterator();
		// 遍历brand
		while (eleBrand.hasNext()) {
			// 将指针找到的brand对象强转为元素
			Element brands = (Element)eleBrand.next();
			// 得到对应brand元素的属性
			String brand = brands.attributeValue("name");
			System.out.println(brand);
			
			// 得到brand下的所有子元素
			Iterator eleType = brands.elementIterator();
			// 遍历type
			while (eleType.hasNext()) {
				// 将指针找到的type对象强转为元素
				Element types = (Element)eleType.next();
				// 得到对应的type属性
				String type = types.attributeValue("name");
				System.out.println("\t"+type);
			}
		}
	}
	/**
	 * 添加元素
	 */
	public void addEle() {
		// 获得根元素
		Element root = document.getRootElement();
		// 添加子节点
		Element addElement = root.addElement("brand");
		// 添加子节点的属性
		Element addBrand = addElement.addAttribute("name", "三星");
		// 添加子节点的子元素
		Element addtype = addBrand.addElement("type");
		// 添加子元素的属性
		addtype.addAttribute("name", "Note3");
	}
	/**
	 * 修改元素节点
	 */
	public void updata() {
		// 获得根元素
		Element root = document.getRootElement();
		// 获得brand子节点的迭代器
		Iterator element = root.elementIterator("brand");
		// 声明一个计数变量
		int id = 0;
		// 遍历子节点
		while (element.hasNext()) {
			// 找到子节点强转为元素
			Element brand = (Element)element.next();
			id++;
			// 添加子元素的属性
			brand.addAttribute("id", id+"");
			// 获得要删除的子元素属性
			Attribute attributeValue = brand.attribute("id");
			// 删除子元素的属性
			brand.remove(attributeValue);
		}
	}
	/**
	 * 删除元素
	 */
	public void deleteEle() {
		// 获得根元素
		Element root = document.getRootElement();
		// 获得子节点的迭代器
		Iterator element = root.elementIterator("brand");
		// 遍历子节点
		while (element.hasNext()) {
			// 将得到的子节点强转为元素
			Element brands = (Element)element.next();
			// 判断是否为要删除的元素
			if(brands.attributeValue("name").equals("苹果")) {
				// 用父节点删除子节点
				brands.getParent().remove(brands);
			}
		}
	}
	/**
	 * 保存XML
	 */
	public void saveXML(String pathname) {
		// 创建格式对象
		OutputFormat format = OutputFormat.createPrettyPrint();
		// 设置编码格式
		format.setEncoding("UTF-8");
		// 是否缩进
		format.setIndent(true);
		// 设置缩进格式
		format.setIndent("\t");
		// 创建输出流
		XMLWriter write = null;
		try {
			write = new XMLWriter(new FileOutputStream(pathname),format);
			// 写入新的Document
			write.write(document);
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				write.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	public static void main(String[] args) {
		// 创建本类对象
		Dom4jDemo demo = new Dom4jDemo();
		// 获得Document
		demo.getDocument();
		// 添加新的元素
		demo.addEle();
		// 修改元素
		demo.updata();
		// 删除元素
		demo.deleteEle();
		// 保存新的Document到XML文件
		demo.saveXML("src\\kgc\\may\\first\\dom4j\\newxml.xml");
		// 得到手机信息
		demo.showInfo();
	}
}

猜你喜欢

转载自blog.csdn.net/Super_Robot/article/details/89759797