起首为何会有Dom4j呢?
由于DOM太耗内存,而SAX只能对XML举行读取,而不能去增加、删除等。所以涌现了Dom4j,它的效力更高,同时也能够举行crud操纵。
1.DOM4J引见
Dom4j是一个简朴、天真地开放源代码的库。Dom4j是由初期开辟JDOM的人分离出来然后自力开辟的。与JDOM差别的是,dom4j运用接口和笼统基类,虽然Dom4j的API相对要庞杂一些,但它供应了比JDOM更好的天真性。
Dom4j是一个异常优秀的Java XML API,具有机能优秀、功能强大和极易运用的特性。如今许多软件采纳的Dom4j,比方Hibernate,包含Sun公司本身的JAXP也用了Dom4j。
运用Dom4j开辟,需下载dom4j响应的jar文件,并导入到项目。下载地点dom4j下载
2.DOM4J案例
依旧运用我们之前的XML文件:
<?xml version="1.0" encoding="utf-8" standalone="no"?><班级> <门生 地点="香港"> <名字>周小星</名字> <岁数>23</岁数> <引见>进修受苦</引见> </门生> <门生 地点="澳门"> <名字>林晓</名字> <岁数>25</岁数> <引见>是一个好门生</引见> </门生></班级>
该文档放在com.dom4j.test
包中。
运用DOM4J也要猎取代表全部文档Document
对象,不过这个Document对象是org.dom4j
包中的。
在主要领中猎取Document对象以下:
// 1.获得一个剖析器SAXReader saxReader = new SAXReader(); // 2.指定剖析哪一个XML文件Document document = saxReader.read(new File("src/com/dom4j/test/myClass.xml"));
然后我们就能够依据需求来写响应的要领,在主要领中挪用。
【1】指定读取某个元素(读取第一个门生的信息)
public static void read(Document document) { // 获得根元素 Element root = document.getRootElement(); // root.elements("门生"):示意掏出root下的一切门生元素 // root.element("门生"):示意掏出root下的第一个门生元素 Element student = root.element("门生"); // 掏出属性 String address = student.attributeValue("地点"); // 掏出各个子节点的值 String name = student.element("名字").getText(); String age = student.element("岁数").getText(); String intro = student.element("引见").getText(); System.out.println(address); System.out.println(name); System.out.println(age); System.out.println(intro); }
【2】增加元素:增加一个门生信息到XML文档中
public static void add(Document document) throws Exception { // 起首我们来建立一个门生节点对象 Element student = DocumentHelper.createElement("门生"); Element name = DocumentHelper.createElement("名字"); name.setText("小强"); Element age = DocumentHelper.createElement("岁数"); age.setText("22"); Element intro = DocumentHelper.createElement("引见"); intro.setText("是一个三好门生"); // 把三个子元素加到student节点下 student.add(name); student.add(age); student.add(intro); // 为门生增加属性 student.addAttribute("地点", "大理"); // 将门生节点增加到根节点下 document.getRootElement().add(student); // 更新xml文件,直接输出会涌现中文乱码,要用OutputFormat OutputFormat output = OutputFormat.createPrettyPrint(); // 设置输出的编码为utf-8 output.setEncoding("utf-8"); // 这里肯定要用FileOutputStream字撙节输出,不能用FileWriter,不然还会有乱码 XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/com/dom4j/test/myClass.xml"), output); xmlWriter.write(document); xmlWriter.close(); }
增加门生到XML文档中,也需要在末了将内存中的Document对象写入响应的文件,不然一切的操纵只是在内存中举行,并不会输出到文件中,这与DOM相似。
我们依旧能够将这段更新的代码零丁写成一个要领,以下:
public static void update(Document document) throws Exception { // 更新xml文件,直接输出会涌现中文乱码,要用OutputFormat OutputFormat output = OutputFormat.createPrettyPrint(); // 设置输出的编码为utf-8 output.setEncoding("utf-8"); XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/com/dom4j/test/myClass.xml"), output); xmlWriter.write(document); xmlWriter.close(); }
【3】增加一个元素到指定位置
public static void addByIndex(Document document) throws Exception { // 建立一个元素 Element newStu = DocumentHelper.createElement("门生"); newStu.setText("王小明"); // 获得一切门生的list List allStudent = document.getRootElement().elements("门生"); allStudent.add(1, newStu); update(document); }
这里实际上是直接在获得的List
中增加,然后更新即可。这里的List
就是java.util
包中的List
【4】删除一个元素或许删除这个元素的属性
删除一个元素与DOM相似,都是经由过程响应的父节点删除该节点。比方说我们要删除第一个门生节点:
public static void delete(Document document) throws Exception { // 找到该元素 Element student = document.getRootElement().element("门生"); // 删除元素的某个属性 student.remove(student.attribute("地点")); // 经由过程父节点删除节点 student.getParent().remove(student); update(document); }
【5】更新元素
比方我们要把一切门生的岁数加1,而且将一切门生的地点属性改成美国:
public static void updateAgeAndAddress(Document document) throws Exception { Element root = document.getRootElement(); List<Element> list = root.elements(); for (Element element : list) { // 更新属性 element.addAttribute("地点", "美国"); // 更新岁数子节点的值 Element e_age = element.element("岁数"); int age = Integer.parseInt(e_age.getTextTrim()); e_age.setText(String.valueOf(age + 1)); } update(document); }
起首为何会有Dom4j呢?
由于DOM太耗内存,而SAX只能对XML举行读取,而不能去增加、删除等。所以涌现了Dom4j,它的效力更高,同时也能够举行crud操纵。
1.DOM4J引见
Dom4j是一个简朴、天真地开放源代码的库。Dom4j是由初期开辟JDOM的人分离出来然后自力开辟的。与JDOM差别的是,dom4j运用接口和笼统基类,虽然Dom4j的API相对要庞杂一些,但它供应了比JDOM更好的天真性。
Dom4j是一个异常优秀的Java XML API,具有机能优秀、功能强大和极易运用的特性。如今许多软件采纳的Dom4j,比方Hibernate,包含Sun公司本身的JAXP也用了Dom4j。
运用Dom4j开辟,需下载dom4j响应的jar文件,并导入到项目。下载地点dom4j下载
2.DOM4J案例
依旧运用我们之前的XML文件:
<?xml version="1.0" encoding="utf-8" standalone="no"?><班级> <门生 地点="香港"> <名字>周小星</名字> <岁数>23</岁数> <引见>进修受苦</引见> </门生> <门生 地点="澳门"> <名字>林晓</名字> <岁数>25</岁数> <引见>是一个好门生</引见> </门生></班级>
该文档放在com.dom4j.test
包中。
运用DOM4J也要猎取代表全部文档Document
对象,不过这个Document对象是org.dom4j
包中的。
在主要领中猎取Document对象以下:
// 1.获得一个剖析器SAXReader saxReader = new SAXReader(); // 2.指定剖析哪一个XML文件Document document = saxReader.read(new File("src/com/dom4j/test/myClass.xml"));
然后我们就能够依据需求来写响应的要领,在主要领中挪用。
【1】指定读取某个元素(读取第一个门生的信息)
public static void read(Document document) { // 获得根元素 Element root = document.getRootElement(); // root.elements("门生"):示意掏出root下的一切门生元素 // root.element("门生"):示意掏出root下的第一个门生元素 Element student = root.element("门生"); // 掏出属性 String address = student.attributeValue("地点"); // 掏出各个子节点的值 String name = student.element("名字").getText(); String age = student.element("岁数").getText(); String intro = student.element("引见").getText(); System.out.println(address); System.out.println(name); System.out.println(age); System.out.println(intro); }
【2】增加元素:增加一个门生信息到XML文档中
public static void add(Document document) throws Exception { // 起首我们来建立一个门生节点对象 Element student = DocumentHelper.createElement("门生"); Element name = DocumentHelper.createElement("名字"); name.setText("小强"); Element age = DocumentHelper.createElement("岁数"); age.setText("22"); Element intro = DocumentHelper.createElement("引见"); intro.setText("是一个三好门生"); // 把三个子元素加到student节点下 student.add(name); student.add(age); student.add(intro); // 为门生增加属性 student.addAttribute("地点", "大理"); // 将门生节点增加到根节点下 document.getRootElement().add(student); // 更新xml文件,直接输出会涌现中文乱码,要用OutputFormat OutputFormat output = OutputFormat.createPrettyPrint(); // 设置输出的编码为utf-8 output.setEncoding("utf-8"); // 这里肯定要用FileOutputStream字撙节输出,不能用FileWriter,不然还会有乱码 XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/com/dom4j/test/myClass.xml"), output); xmlWriter.write(document); xmlWriter.close(); }
增加门生到XML文档中,也需要在末了将内存中的Document对象写入响应的文件,不然一切的操纵只是在内存中举行,并不会输出到文件中,这与DOM相似。
我们依旧能够将这段更新的代码零丁写成一个要领,以下:
public static void update(Document document) throws Exception { // 更新xml文件,直接输出会涌现中文乱码,要用OutputFormat OutputFormat output = OutputFormat.createPrettyPrint(); // 设置输出的编码为utf-8 output.setEncoding("utf-8"); XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/com/dom4j/test/myClass.xml"), output); xmlWriter.write(document); xmlWriter.close(); }
【3】增加一个元素到指定位置
public static void addByIndex(Document document) throws Exception { // 建立一个元素 Element newStu = DocumentHelper.createElement("门生"); newStu.setText("王小明"); // 获得一切门生的list List allStudent = document.getRootElement().elements("门生"); allStudent.add(1, newStu); update(document); }
这里实际上是直接在获得的List
中增加,然后更新即可。这里的List
就是java.util
包中的List
【4】删除一个元素或许删除这个元素的属性
删除一个元素与DOM相似,都是经由过程响应的父节点删除该节点。比方说我们要删除第一个门生节点:
public static void delete(Document document) throws Exception { // 找到该元素 Element student = document.getRootElement().element("门生"); // 删除元素的某个属性 student.remove(student.attribute("地点")); // 经由过程父节点删除节点 student.getParent().remove(student); update(document); }
【5】更新元素
比方我们要把一切门生的岁数加1,而且将一切门生的地点属性改成美国:
public static void updateAgeAndAddress(Document document) throws Exception { Element root = document.getRootElement(); List<Element> list = root.elements(); for (Element element : list) { // 更新属性 element.addAttribute("地点", "美国"); // 更新岁数子节点的值 Element e_age = element.element("岁数"); int age = Integer.parseInt(e_age.getTextTrim()); e_age.setText(String.valueOf(age + 1)); } update(document); }
以上就是XML—XML剖析之DOM4J的内容,更多相关内容请关注ki4网(www.ki4.cn)!