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();
原创粉丝点击