<?xml version="1.0" encoding="GBK"?> <persons> <men> <person id = "20111907">潘腾</person> <person id = "20111901">雷帅</person> </men> <women> <person id = "20111908">杨悦</person> <person id = "20111908">张东月</person> </women> </persons>
import java.io.*; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import org.dom4j.*; import org.dom4j.io.*; import java.util.*; import org.jaxen.*; public class DOM_XML { public static void main(String[] args) { try { // read_xml1(); // read_xml2(); // read_xml3(); // read_xml4(); // creatXml(); modifyXML(); } catch(Exception e) { System.out.println("错误信息:" + e); } } /** * 第一种方式 使用迭代器读XML */ public static void read_xml1() { try { SAXReader reader = new SAXReader(); //解析器 Document doc = reader.read(new File("persons.xml")); //文档对象 Element root = doc.getRootElement(); //获取根元素 <persons> Iterator it = root.elementIterator(); //<men> <women> while(it.hasNext()) { Element ele = (Element)it.next(); Iterator sec_it = ele.elementIterator(); while(sec_it.hasNext()) { Element man = (Element)sec_it.next(); //不调用next方法,就不会下移 便会产生死循环 String name = man.getName(); String attr = man.attributeValue("id"); String content = man.getText(); System.out.println("name:" + name + "\nid: " + attr + "\nContent: " + content); } } } catch(Exception e) { } } /** * 第二种方式 elements */ public static void read_xml2() { try { SAXReader reader = new SAXReader(); //解析器 Document doc = reader.read(new File("persons.xml")); //文档对象 Element root = doc.getRootElement(); //获取根元素 <persons> List<Element> listEle = root.elements("men"); //获取root下的所有men元素 List<Element> listMen = listEle.get(0).elements("person"); //获取men下的所有person元素 for(Element element_obj:listMen) { String name = element_obj.getName(); String attr = element_obj.attributeValue("id"); String content = element_obj.getText(); System.out.println("name:" + name + "\nid: " + attr + "\nContent: " + content); } } catch(Exception e) { } } /** * 第三种方式 使用适配器 这个暂时没有搞懂 */ public static void read_xml3() { try { SAXReader reader = new SAXReader(); //解析器 Document doc = reader.read(new File("persons.xml")); //文档对象 Element root = doc.getRootElement(); //获取根元素 <persons> //第三种方式 适配器 doc.accept(new VisitorSupport() {//使用观察器的子类,来完成对xml文件的读取。 public void visit(Element el) {//利用观察期进行xml的读取。 System.out.println(el.getName()+": "+el.getText()); } }); } catch(Exception e) { } } /** * 第四种方式 selectNodes * selectNodes的参数是元素路径 需要学习XPath相关知识 */ public static void read_xml4() { try { SAXReader reader = new SAXReader(); //解析器 Document doc = reader.read(new File("persons.xml")); //文档对象 Element root = doc.getRootElement(); //获取根元素 <persons> //第四种 使用selectNodes读取XML //需要导入 org.jaxen.* 包 否则会报错 List list = doc.selectNodes("//persons/men/person");//使用selectNodes获取所要查询xml的节点。 for(Object obj:list){//遍历节点,获取节点内数据。 Element el = (Element)obj; System.out.println(el.getText()); } } catch(Exception e) {} } /** * 创建XML文件 * XML文件第一行 encoding值为UTF-8 这是错误的 * java 在windows 中文版环境下 默认采用的是GBK,所以需要手动更改 */ public static void creatXml() { try { Document newdoc = DocumentHelper.createDocument(); Element persons = newdoc.addElement("persons"); Element men = persons.addElement("men"); Element person1 = men.addElement("person"); person1.addAttribute("id", "20111907"); person1.setText("panteng"); Element person2 = men.addElement("person"); person2.addAttribute("id", "20111901"); person2.setText("leishuai"); File newxml = new File("newFile.xml"); if(newxml.exists()) { newxml.delete(); } newxml.createNewFile(); //创建文件 XMLWriter out = new XMLWriter(new FileWriter(newxml)); out.write(newdoc); out.flush(); out.close(); System.out.println("文件创建完毕"); } catch(Exception e) { } } /** * 修改XML 删除节点、修改 添加属性 */ public static void modifyXML() { try { SAXReader reader = new SAXReader(); //解析器 Document doc = reader.read(new File("persons.xml")); //文档对象 Element root = doc.getRootElement(); //获取根元素 <persons> Element men = root.element("men"); //删除雷帅的记录元素 Iterator it = men.elementIterator(); while(it.hasNext()) { Element ele = (Element)it.next(); if(ele.getText().equals("雷帅")) { men.remove(ele); } } //增加伟男记录 Element weiNan = men.addElement("person"); weiNan.setText("伟男"); //修改 潘腾的id 并增加age属性 Iterator it2 = men.elementIterator(); while(it2.hasNext()) { Element ele = (Element)it2.next(); if(ele.getText().equals("潘腾")) { ele.setAttributeValue("id", "080635"); ele.addAttribute("age", "23"); } } File newxml = new File("newFile.xml"); if(newxml.exists()) { newxml.delete(); } newxml.createNewFile(); //创建文件 XMLWriter out = new XMLWriter(new FileWriter(newxml)); out.write(doc); out.flush(); out.close(); System.out.println("文件更新完毕"); } catch(Exception e) { System.out.println("错误信息:" + e); } } }
不难看出,JAVA 对xml的修改,实际上是修改了doc对象,然后删除原来的文件,将这个对象 重新写入一个文件,文件名和原先的相同。
时间: 2024-10-23 14:31:36