解析xml笔记
dom是解析xml的底层接口之一(另一种是sax) 而jdom和dom4j则是基于底层api的更高级封装 dom是通用的,而jdom和dom4j则是面向java语言的
DOM编程相对简单,但是速度比较慢,占用内存多
DOM4J
package test; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import org.dom4j.io.OutputFormat; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Iterator; import java.util.List; public class TestWrite { public void WriteXml() { //文档对象 Document document = DocumentHelper.createDocument(); //根节点 Element root = document.addElement("books"); //加属性 root.addAttribute("type","小说"); //加注释 root.addComment("书店"); //子元素 Element book = root.addElement("book"); book.addAttribute("price","56.5"); Element title = book.addElement("title"); title.setText("aaaaa"); //子元素 Element book1 = root.addElement("book"); book1.addAttribute("price","66.5"); Element title1 = book1.addElement("title"); title1.setText("bbbbb"); //子元素 Element book2 = root.addElement("book"); book2.addAttribute("price","76.5"); Element title2 = book2.addElement("title"); title2.setText("ccccc"); // 设置字体 OutputFormat format = OutputFormat.createCompactFormat(); format.setEncoding("GBK"); try { XMLWriter output = new XMLWriter(new FileWriter(new File( "books.xml")),format); output.write(document); output.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void ReadXml() { SAXReader saxReader = new SAXReader(); try { Document document = saxReader.read("books.xml"); // 1查找属性 List list = document.selectNodes("//book/@price");// 1查找属性 // 获取//book/@price的值的集合 for (int i = 0; i < list.size(); i++) { Attribute attr = (Attribute) list.get(i); if (Float.parseFloat(attr.getValue()) > 60) attr.setValue("1000");// 设置新值 } // 2查找元素 List list1 = document.selectNodes("//title");// 2查找元素book for (int j = 0; j < list1.size(); j++) { Element elem = (Element) list1.get(j); //elem.setText("mmmmmmmmmm"); } //3获取价格等于1000的书的标题 List list2 = document.selectNodes("//book[@price='1000']/title"); Iterator iter = list2.iterator(); while (iter.hasNext()) { Element el = (Element) iter.next(); System.out.println(el.getText()); } //4 设置字体 OutputFormat format = OutputFormat.createCompactFormat();// 缩进 format.setEncoding("GBK");// 字符集 XMLWriter output = new XMLWriter(new FileWriter(new File( "books.xml")),format); output.write(document); output.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { TestWrite testwrite = new TestWrite(); testwrite.ReadXml(); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |