DOM4J操作XML

xiaoxiao2021-02-28  127

<?xml version="1.0" encoding="GBK"?> <Phone> <Brand name="Apple"> <Type name="iphone 8s"/> </Brand> <Brand name="HuaWei"> <Type name="荣耀"/> </Brand> <Brand name="小米"> <Type name="小米5s"/> </Brand> <Brand name="小米"> <Type name="小米5s"/> </Brand> </Phone> package com.cn; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.io.Writer; import java.util.Iterator; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.QName; import org.dom4j.dom.DOMAttribute; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; public class TestDoc4j { Document doc = null; public static void main(String[] args) { TestDoc4j td = new TestDoc4j(); // 1. 加载DOM树(读取XML文档) td.loadDocument(); // 2. 读取DOM树文档内容 // td.showInfo(); // 3. 保存xml文件 // String path = "src/com/cn/xml/new.xml"; // td.saveXML(path); // 4.添加节点信息到xml文件 // td.addElementInfo(); // 展示一下 // td.showInfo(); // 5.修改节点信息到xml文件 td.changeElementInfo(); // 6.删除节点信息 td.deleteElementInfo(); td.showInfo(); } private void deleteElementInfo() { // 获取根节点 Element root = doc.getRootElement(); // 把根节点中所有的子节点全部放入迭代器 @SuppressWarnings("unchecked") Iterator<Element> iterator = root.elementIterator(); // 循环遍历根节点 while (iterator.hasNext()) { Element brandEle = iterator.next(); // 把当前节点的name属性值与OPPO匹配,如果匹配,则移除该点 if (brandEle.attributeValue("name").equals("OPPO")) { // 找到brand品牌节点的父节点,然后移除name值为OPPO的brand节点 brandEle.getParent().remove(brandEle); // 通过创建DOMAttribute对象,用QName.get获取指定属性清除指定节点指定属性 brandEle.remove(new DOMAttribute(QName.get("id"))); break;// 只要删除找到匹配的第一个就跳出循环 } } this.saveXML("src/com/cn/xml/new.xml"); } private void changeElementInfo() { // 1.1 得到标签对象 Element elem = doc.getRootElement().element("Brand"); // 1.2 得到id属性对象 修改属性值 elem.attribute("name").setValue("xixi"); /** * 修改属性值(方案二) 方法:Element标签类的addAttribute("attr","value")方法 */ /* * //1.得到属性值标签 Element stuElem=doc.getRootElement().element("student"); * //2.通过增加同名属性的方法,修改属性值 stuElem.addAttribute("id", "000009"); * //key相同,覆盖;不存在key,则添加 */ /** * 修改文本 方法:Element标签类的setTest("新文本值")方法 1.得到标签对象 2.修改文本 */ Element nameElem = doc.getRootElement().element("Brand") .element("Type1"); nameElem.setText("王二麻子"); this.saveXML("src/com/cn/xml/new.xml"); } private void addElementInfo() { // 获取根节点 Element rootele = doc.getRootElement(); // 添加Brand子节点给根节点 Element brandele = rootele.addElement("Brand"); // 给Brand节点增加属性及属性值 brandele.addAttribute("name", "小米"); // 给Brand节点增加子节点Type Element type = brandele.addElement("Type"); // 给Type增加属性及属性值 type.addAttribute("name", "小米5s"); // 保存新增信息 this.saveXML("src/com/cn/xml/new.xml"); } private void saveXML(String path) { // 1.创建XMLWriter字符输出流对象 XMLWriter xmlwriter = null; try { // 2. 创建writer对象指向FileWriter,并把地址给出 Writer writer = new FileWriter(path); // 3. 指定xml生成时,声明中的Ecoding字符集编码格式 // OutputFormat of = new OutputFormat(); // 自动换行缩进 OutputFormat of = OutputFormat.createPrettyPrint(); of.setEncoding("GBK"); // 4. 把指定的xml格式及文件输出流对象,利用xmlWriter输出到指定目的地输出文件 xmlwriter = new XMLWriter(writer, of); // 5. 调用writer方法,以DOM树为入参,生成xml文件 xmlwriter.write(doc); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { xmlwriter.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } private void showInfo() { Element ele = doc.getRootElement();// 获取根节点对象 @SuppressWarnings("unchecked") Iterator<Element> it = ele.elementIterator();// 从根节点中获取子节点 while (it.hasNext()) { Element ite = it.next(); String brandName = ite.attributeValue("name");// 读取品牌名称 @SuppressWarnings("unchecked") Iterator<Element> itType = ite.elementIterator();// 品牌下所有手机型号节点 while (itType.hasNext()) { Element itT = itType.next(); String type = itT.attributeValue("name"); // String type=itT.getStringValue();//读取文本格式 System.out.println(brandName + " " + type); } } } private void loadDocument() { SAXReader sr = new SAXReader(); try { // 接收读到的文件 doc = sr.read("src/com/cn/xml/new.xml"); } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
转载请注明原文地址: https://www.6miu.com/read-26533.html

最新回复(0)