dom4j使用
来源:互联网 发布:日本第一大姓 知乎 编辑:程序博客网 时间:2024/06/05 09:49
引用大神的,特此加上原文链接:http://blog.csdn.net/chenweitang123/article/details/6255108#_Toc288084410
1.读取XML文档:
读写XML文档主要依赖于org.dom4j.io包,有DOMReader和SAXReader两种方式。因为利用了相同的接口,它们的调用方式是一样的。
读取指定的xml文件之后返回一个Document对象,这个对象代表了整个XML文档,用于各种Dom运算。执照XML文件头所定义的编码来转换。
public static Document load(String filename) { Document document = null; try { SAXReader saxReader = new SAXReader(); document = saxReader.read(new File(filename)); // 读取XML文件,获得document对象 } catch (Exception ex) { ex.printStackTrace(); } return document; } public static Document load(URL url) { Document document = null; try { SAXReader saxReader = new SAXReader(); document = saxReader.read(url); // 读取XML文件,获得document对象 } catch (Exception ex) { ex.printStackTrace(); } return document; }
2.获取根节点
根节点是xml分析的开始,任何xml分析工作都需要从根开始
Xml xml = new Xml(); Document dom = xml.load(path + "/" + file); Element root = dom.getRootElement();
3. 新增一个节点以及其下的子节点与数据
Element menuElement = root.addElement("menu");Element engNameElement = menuElement.addElement("engName");engNameElement.setText(catNameEn);Element chiNameElement = menuElement.addElement("chiName");chiNameElement.setText(catName);
4.写入XML文件
注意文件操作的包装类是乱码的根源
public static boolean doc2XmlFile(Document document, String filename) { boolean flag = true; try { XMLWriter writer = new XMLWriter(new OutputStreamWriter( new FileOutputStream(filename), "UTF-8")); writer.write(document); writer.close(); } catch (Exception ex) { flag = false; ex.printStackTrace(); } System.out.println(flag); return flag; }
Dom4j通过XMLWriter将Document对象表示的XML树写入指定的文件,并使用OutputFormat格式对象指定写入的风格和编码方法。调用OutputFormat.createPrettyPrint()方法可以获得一个默认的pretty print风格的格式对象。对OutputFormat对象调用setEncoding()方法可以指定XML文件的编码方法。
public void writeTo(OutputStream out, String encoding) throws UnsupportedEncodingException, IOException { OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("gb2312"); XMLWriter writer = new XMLWriter(System.out, format); writer.write(doc); writer.flush(); return; }
5.遍历xml节点
对Document对象调用getRootElement()方法可以返回代表根节点的Element对象。拥有了一个Element对象后,可以对该对象调用elementIterator()方法获得它的子节点的Element对象们的一个迭代器。使用(Element)iterator.next()方法遍历一个iterator并把每个取出的元素转化为Element类型。
public boolean isOnly(String catNameEn, HttpServletRequest request, String xml) { boolean flag = true; String path = request.getRealPath(""); Document doc = load(path + "/" + xml); Element root = doc.getRootElement(); for (Iterator i = root.elementIterator(); i.hasNext();) { Element el = (Element) i.next(); if (catNameEn.equals(el.elementTextTrim("engName"))) { flag = false; break; } } return flag; }
6.创建xml文件
public static void main(String args[]) { String fileName = "c:/text.xml"; Document document = DocumentHelper.createDocument();// 建立document对象,用来操作xml文件 Element booksElement = document.addElement("books");// 建立根节点 booksElement.addComment("This is a test for dom4j ");// 加入一行注释 Element bookElement = booksElement.addElement("book");// 添加一个book节点 bookElement.addAttribute("show", "yes");// 添加属性内容 Element titleElement = bookElement.addElement("title");// 添加文本节点 titleElement.setText("ajax in action");// 添加文本内容 try { XMLWriter writer = new XMLWriter(new FileWriter(new File(fileName))); writer.close(); } catch (Exception e) { e.printStackTrace(); } }
7.修改节点属性
public static void modifyXMLFile() { String oldStr = "c:/text.xml"; String newStr = "c:/text1.xml"; Document document = null; //修改节点的属性 try { SAXReader saxReader = new SAXReader(); // 用来读取xml文档 document = saxReader.read(new File(oldStr)); // 读取xml文档 List list = document.selectNodes("/books/book/@show");// 用xpath查找节点book的属性 Iterator iter = list.iterator(); while (iter.hasNext()) { Attribute attribute = (Attribute) iter.next(); if (attribute.getValue().equals("yes")) attribute.setValue("no"); } } catch (Exception e) { e.printStackTrace(); } //修改节点的内容 try { SAXReader saxReader = new SAXReader(); // 用来读取xml文档 document = saxReader.read(new File(oldStr)); // 读取xml文档 List list = document.selectNodes("/books/book/title");// 用xpath查找节点book的内容 Iterator iter = list.iterator(); while (iter.hasNext()) { Element element = (Element) iter.next(); element.setText("xxx");// 设置相应的内容 } } catch (Exception e) { e.printStackTrace(); } try { XMLWriter writer = new XMLWriter(new FileWriter(new File(newStr))); writer.write(document); writer.close(); } catch (Exception ex) { ex.printStackTrace(); } }
8.删除节点
public static void removeNode() { String oldStr = "c:/text.xml"; String newStr = "c:/text1.xml"; Document document = null; try { SAXReader saxReader = new SAXReader();// 用来读取xml文档 document = saxReader.read(new File(oldStr));// 读取xml文档 List list = document.selectNodes("/books/book");// 用xpath查找对象 Iterator iter = list.iterator(); while (iter.hasNext()) { Element bookElement = (Element) iter.next(); // 创建迭代器,用来查找要删除的节点,迭代器相当于指针,指向book下所有的title节点 Iterator iterator = bookElement.elementIterator("title"); while (iterator.hasNext()) { Element titleElement = (Element) iterator.next(); if (titleElement.getText().equals("ajax in action")) { bookElement.remove(titleElement); } } } } catch (Exception e) { e.printStackTrace(); } try { XMLWriter writer = new XMLWriter(new FileWriter(new File(newStr))); writer.write(document); writer.close(); } catch (Exception ex) { ex.printStackTrace(); } }
2、XML文档操作2
2.1、Document对象相关
1、读取XML文件,获得document对象.
SAXReader reader = new SAXReader(); Document document = reader.read(new File("input.xml"));
2、解析XML形式的文本,得到document对象.
String text = "<members></members>"; Document document = DocumentHelper.parseText(text);
3、主动创建document对象.
Document document = DocumentHelper.createDocument(); Element root = document.addElement("members");// 创建根节点
9.添加一个CDATA节点.
Element contentElm = infoElm.addElement("content"); contentElm.addCDATA(diary.getContent());
2.3、属性相关.
1.取得节点的指定的属性
Element root=document.getRootElement(); Attribute attribute=root.attribute("size"); // 属性名name
2.取得属性的文字
String text=attribute.getText(); String text2=root.element("name").attributeValue("firstname");//这个是取得根节点下name字节点的firstname属性的值.
3.遍历某节点的所有属性
Element root=document.getRootElement();for(Iterator it=root.attributeIterator();it.hasNext();){Attribute attribute = (Attribute) it.next();String text=attribute.getText();System.out.println(text);}
4.设置某节点的属性和文字.
newMemberElm.addAttribute("name", "sitinspring");
5.设置属性的文字
Attribute attribute=root.attribute("name"); attribute.setText("sitinspring");
6.删除某属性
Attribute attribute=root.attribute("size");// 属性名name root.remove(attribute);
2.4、将文档写入XML文件.
1.文档中全为英文,不设置编码,直接写入.
XMLWriter writer = new XMLWriter(new FileWriter("output.xml")); writer.write(document); writer.close();
2.文档中含有中文,设置编码格式再写入.
OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("GBK"); // 指定XML编码XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);writer.write(document);writer.close();
2.5、字符串与XML的转换
1.将字符串转化为XML
String text = "<members> <member>sitinspring</member> </members>"; Document document = DocumentHelper.parseText(text);
2.将文档或节点的XML转化为字符串.
SAXReader reader = new SAXReader();Document document = reader.read(new File("input.xml"));Element root=document.getRootElement();String docXmlText=document.asXML();String rootXmlText=root.asXML();Element memberElm=root.element("member");String memberXmlText=memberElm.asXML();
阅读全文
0 0
- dom4j使用
- dom4j 使用
- DOM4J 使用
- Dom4J使用
- DOM4J使用
- Dom4j使用
- dom4j使用
- Dom4j使用
- Dom4j使用
- DOM4J使用
- dom4j使用
- dom4j使用
- Dom4j 使用
- 使用Dom4j
- dom4j 学习 -- 封装dom4j工具类+如何使用dom4j解析
- DOM4J 使用简介[转载]
- Dom4j 使用简介
- DOM4J 使用简介(转)
- Android开发-小技巧汇总
- 记录一个牛逼的 lnmp自动安装脚本
- 3.韦东山嵌入式学习笔记-烧写工具
- SFTP
- Javascript实现秒表倒计时
- dom4j使用
- C指针详解(经典,非常详细)
- 文本
- wordpress后台出现404
- ubuntu16.04安装chrome
- SSO单点登录三种情况的实现方式详解
- 常用正则表达式大全
- WINDOWS核心编程——DLL基础和实操
- centos安装用yum的方式安装svn,并创建库