org.dom4j 解析XML


org.dom4j 解析xml java 代码

1
import java.io.File; 2 import java.io.FileOutputStream; 3 import java.io.FileWriter; 4 import java.io.OutputStreamWriter; 5 import java.util.Iterator; 6 import java.util.List; 7 import org.dom4j.Attribute; 8 import org.dom4j.Document; 9 import org.dom4j.Element; 10 import org.dom4j.io.OutputFormat; 11 import org.dom4j.io.SAXReader; 12 import org.dom4j.io.XMLWriter; 13 /** 14 * element:元素 15 * attribute:属性 16 * Document*read(File file)从指定文件中读取文档 17 * Element*element(String name) 返回第一个元素为给定的本地名称和命名空间。 18 * List*elements()返回此元素中包含的元素。 19 * List*elements(String name) 返回该元素中包含的元素与给定的本地名称和命名空间。 20 * Attribute*attribute(String name)返回给定名称的属性 21 * List*attributes()返回该元素包含该属性的实例作为一个支持列表,这样可能被修改的属性直接使用列表界面 22 * String*getName()返回此节点的名称 23 * String*getValue() 返回该属性的值。 24 * Element*getRootElement() 返回文档的根元素。 25 * String*getText() 返回该元素的文本值没有通过递归子元素。 26 * void*setText(String text)设置文本数据的节点 或这个方法会抛出一个不支持的操作异常,如果它是只读的。 27 * static OutputFormat*createPrettyPrint() 一个静态的助手方法来创建默认的打印格式。 28 * Element*addText(String text) 添加一个新的文本节点与给定的文本元素。 29 * Element*addCDATA(String cdata) 添加一个新的CDATA节点与给定的文本元素。 30 * Element*addElement(String name) 添加一个新元素节点的名字这个分支,并返回一个新节点的引用。 31 * Element*addAttribute(String name, String value)增加的属性值给定的本地名称。 32 * void*write(Document doc)这将打印当前命令的文档。 33 */ 34 35 public class DOM4J_CURD_XML { 36 public static void main(String[] args) { 37 try { 38 39 new DOM4J_CURD_XML().test(); 40 41 } catch (Exception e) { 42 e.printStackTrace(); 43 } 44 } 45 46 /** 47 * 删除属性、节点。 48 * 添加属性、节点。 49 * 50 */ 51 public void test() throws Exception { 52 // 创建saxReader对象 53 SAXReader reader = new SAXReader(); 54 // 通过read方法读取一个文件 转换成Document对象 55 Document document = reader.read(new File("src/sdmz.xml")); 56 //获取根节点元素对象 57 Element node = document.getRootElement(); 58 //遍历所有的元素节点 方法1 59 listNodes(node); //查看========================================== 60 //遍历所有的元素节点 方法2 61 //elementMethod(node); //查看========================================== 62 63 // 获取四大名著元素节点中,子节点名称为红楼梦元素节点。 64 Element element = node.element("红楼梦"); 65 //获取element的id属性节点对象 66 Attribute attribu = element.attribute("id"); 67 //删除属性 68 element.remove(attribu); //删除========================================= 69 70 //添加新的属性 71 element.addAttribute("name", "曹雪芹"); //增加(属性 )======================= 72 73 //获取element中的作者元素节点对象 74 Element sex = element.element("性别"); 75 //删除元素节点 76 boolean flag = element.remove(sex); //删除节点====================== 77 //返回true代码删除成功,否则失败 78 System.out.println(flag+"操作成功"); 79 Element author = element.element("作者"); 80 author.setName("读者"); //更改节点名================================== 81 author.setText("刘杨"); //更改节点内容================================= 82 83 // 在红楼梦元素节点中添加朝代元素的节点 84 Element newElement = element.addElement("朝代"); //增加(节点)============== 85 newElement.addText("清朝"); //增加(节点内容)======================= 86 87 //添加CDATA区域 88 element.addCDATA("红楼梦,是一部爱情小说."); //增加(CDATA)===================== 89 // 写入到一个新的文件中 90 writer(document); 91 } 92 93 /** 94 * 把document对象写入新的文件 95 * 96 */ 97 public void writer(Document document) throws Exception { 98 // // 排版紧凑的格式 99 // OutputFormat format = OutputFormat.createCompactFormat(); 100 // 排版缩进的格式 101 OutputFormat format = OutputFormat.createPrettyPrint(); 102 // 设置编码 103 format.setEncoding("UTF-8"); 104 // 创建XMLWriter对象,指定了写出文件及编码格式 105 XMLWriter writer = new XMLWriter(new FileWriter(new File("src/sdmz2.xml")),format); 106 //XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(new File("src/sdmz2.xml")), "UTF-8"), format); 107 // 写入 108 writer.write(document); 109 // 立即写入 110 writer.flush(); 111 // 关闭操作 112 writer.close(); 113 } 114 115 /** 116 * 遍历所有的元素节点 方法1 117 * 遍历当前节点元素下面的所有(元素的)子节点 118 * 119 */ 120 public void listNodes(Element node) { 121 System.out.println("当前节点的名称:" + node.getName()); 122 // 获取当前节点的所有属性节点 123 List<Attribute> list = node.attributes(); 124 // 遍历属性节点,获得属性名称及属性值 125 for (Attribute attr : list) { 126 System.out.println(attr.getName()+ " -- =" + attr.getValue()); 127 } 128 129 //获得节点的文本内容 130 if (!(node.getTextTrim().equals(""))) { //去空格,看是否为空 131 System.out.println("文本内容:" + node.getText()); 132 } 133 134 // 当前节点下面子节点迭代器 135 Iterator<Element> it = node.elementIterator(); 136 // 遍历 137 while (it.hasNext()) { 138 // 获取某个子节点对象 139 Element e = it.next(); 140 // 对子节点进行遍历 141 listNodes(e); 142 } 143 } 144 145 /** 146 * 遍历所有的元素节点 方法2 147 * 介绍Element中的element方法和elements方法的使用 148 * 149 */ 150 public void elementMethod(Element node) { 151 // 获取node节点中,子节点的元素名称为西游记的元素节点。 152 Element e = node.element("西游记"); 153 // 获取西游记元素节点中,子节点为作者的元素节点(可以看到只能获取第一个作者元素节点) 154 Element author = e.element("作者"); 155 System.out.println(e.getName() + " --- =" + author.getText()); 156 157 158 // 获取西游记这个元素节点 中,所有子节点名称 为作者 元素的节点 。 159 List<Element> authors = e.elements("作者"); 160 for (Element auts : authors) { 161 System.out.println(auts.getText()); 162 } 163 // 获取西游记这个元素节点 所有元素的子节点。 164 List<Element> elements = e.elements(); 165 for (Element el : elements) { 166 System.out.println(el.getText()); 167 } 168 } 169 170 }

2.  sdmz.xml

 1 <?xml version="1.0" encoding="UTF-8"?>  
 2 <四大名著>  
 3     <西游记 id="x001">  
 4         <作者>吴承恩1</作者>  
 5         <作者>吴承恩2</作者>  
 6         <朝代>明朝</朝代>  
 7     </西游记>  
 8     <红楼梦 id="x002">  
 9         <作者>曹雪芹</作者> 
10         <性别></性别> 
11     </红楼梦>  
12 </四大名著> 

3.  运行结果:sdmz2.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <四大名著> 
 3   <西游记 id="x001"> 
 4     <作者>吴承恩1</作者>  
 5     <作者>吴承恩2</作者>  
 6     <朝代>明朝</朝代> 
 7   </西游记>  
 8   <红楼梦 name="曹雪芹"> 
 9     <读者>刘杨</读者>  
10     <朝代>清朝</朝代>
11     <![CDATA[红楼梦,是一部爱情小说.]]>
12   </红楼梦> 
13 </四大名著>
原文地址:https://www.cnblogs.com/liuyangv/p/8022481.html