首页 > 代码库 > dom4j 创建XML文件

dom4j 创建XML文件

package com.hengtian.util;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;public class XmlManager {    public static void main(String[] args) {          XmlManager xmlManager = new XmlManager();          // 初始化xml文档          Document doc = null;          // 通过dom4j方法创建xml          String[] arr = new String[]{"1","2","3","4","5","6","7","8","9"};        doc = xmlManager.createXml(arr);            // XML字符串          // String strXMl = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"          // + "<?xml-stylesheet type=\"text/xsl\" href=http://www.mamicode.com/"students.xsl\"?>"          // + "<students><!--Students Table-->   <student stu=\"001\">"          // + "<name>张三</name><age>18</age></student><student stu=\"002\">"          // + "<name>李四</name><age>19</age></student></students>";          // 通过字符串创建xml          // doc = xmlManager.createDocumentByString(strXMl);          // XMl输出路径           String outputPath = "xml/Students.xml";          // 输出xml  //         xmlManager.saveDocument(doc, outputPath);            // xml输入路径  //        String inputPath = "xml/Students.xml";            // 根据xml路径更改XML          //xmlManager.ModifyXml(inputPath);            // 根据xml路径获取doc          //doc = xmlManager.getDocument(inputPath);          // 遍历XML  //         xmlManager.traversalDocumentByElementIterator(doc);          // xmlManager.traversalDocumentByVisitor(doc);          //xmlManager.traversalDocumentByElements(doc);          //xmlManager.traversalDocumentByselectNodes(doc, "/Students/student/name");      }         /**      * 获取XML文件      * @param inputPath      * @return      */      public Document getDocument(String inputPath) {          // 输入文件          File inputXml = new File(inputPath);          if(!inputXml.exists()){//判断文件是否存在              try {                  inputXml.createNewFile();  //创建文件              } catch (IOException e) {                  e.printStackTrace();              }          }          SAXReader saxReader = new SAXReader();          Document document = null;          try {              document = saxReader.read(inputXml);          } catch (DocumentException e) {              e.printStackTrace();          }          return document;      }            /**      * 通过Dom4j方法创建xml文档      *       * @return      */      public Document createXml(String[] arr) {          Document doc = DocumentHelper.createDocument();        // 创建ProcessingInstruction          Map<String, String> inMap = new HashMap<String, String>();         // inMap.put("type", "text/xsl");         // inMap.put("href", "students.xsl");          //doc.addProcessingInstruction("xml-stylesheet", inMap);          // 增加根节点          Element rssSourcesElement = doc.addElement("RSSsources");          // 增加注释         // studentsElement.addComment("Students Table");          for(String str : arr){            Element rssElement = rssSourcesElement.addElement("rssSource");            rssElement.addAttribute("sourceId", str);        }//        // 增加子节点  //        Element stuElement = studentsElement.addElement("student");  //        // 增加属性  //        stuElement.addAttribute("stu", "001");  //        // 增加名称节点  //        Element nameElement = stuElement.addElement("name");  //        // 设置名称节点的值  //        nameElement.setText("张三");  //        // 增加年龄节点  //        Element ageElement = stuElement.addElement("age");  //        // 设置年龄节点的值  //        ageElement.setText("18");  //  //        // 同上  //        Element anotherStuElement = studentsElement.addElement("student");  //        anotherStuElement.addAttribute("stu", "002");  //        Element anotherNameElement = anotherStuElement.addElement("name");  //        anotherNameElement.setText("李四");  //        Element anotherAgeElement = anotherStuElement.addElement("age");  //        anotherAgeElement.setText("19");          return doc;      }        public Document createXml(List<Long> arr) {          Document doc = DocumentHelper.createDocument();        Map<String, String> inMap = new HashMap<String, String>();          // 增加根节点          Element rssSourcesElement = doc.addElement("Urls");          for(Long str : arr){            Element rssElement = rssSourcesElement.addElement("url");            rssElement.addAttribute("CRC32", str.toString());        }        return doc;      }     /**      * 通过字符串创建xml文档      * @param xmlStr      * @return      */      public Document createDocumentByString(String xmlStr) {            Document doc = null;          try {              // 通过字符串转换直接构建xml文档              doc = DocumentHelper.parseText(xmlStr);          } catch (DocumentException e) {              e.printStackTrace();          }          return doc;      }        /**      * 修改xml      *       * @param inputXmlPath      */      public void ModifyXml(String inputXmlPath) {          // 获取文件          File inputXml = new File(inputXmlPath);            try {              SAXReader saxReader = new SAXReader();              // 创建document              Document doc = saxReader.read(inputXml);              // 读取Students/student下所有具有属性stu的元素              List list = doc.selectNodes("/Students/student/@stu");              Iterator iter = list.iterator();              while (iter.hasNext()) {                  Attribute attribute = (Attribute) iter.next();                  if (attribute.getValue().equals("001"))                      attribute.setValue("0001");              }                list = doc.selectNodes("/Students/student");              iter = list.iterator();              while (iter.hasNext()) {                  Element element = (Element) iter.next();                  Iterator iterator = element.elementIterator("name");                  while (iterator.hasNext()) {                      Element nameElement = (Element) iterator.next();                      if (nameElement.getText().equals("张三"))                          nameElement.setText("王五");                  }              }              String outputPath = "xml/Students-Modified.xml";              saveDocument(doc, outputPath);            }            catch (DocumentException e) {              System.out.println(e.getMessage());          }        }        /**      * 将文档输出到文件保存,可指定格式化输出,可指定字符编码。      *       * @param document      * @param outputFile      */      public void saveDocument(Document doc, String outputPath) {          // 输出文件          File outputFile = new File(outputPath);          try {              // 美化格式              OutputFormat format = OutputFormat.createPrettyPrint();              // 指定XML编码,不指定的话,默认为UTF-8              format.setEncoding("UTF-8");              XMLWriter output = new XMLWriter(new FileWriter(outputFile), format);              output.write(doc);             output.flush();            output.close();          } catch (IOException e) {              System.out.println(e.getMessage());          }      }        /**      * 普通方法遍历xml      *       * @param doc      */      public void traversalDocumentByElementIterator(Document doc) {          // 获取根节点          Element root = doc.getRootElement();          // 枚举根节点下所有子节点          for (Iterator ie = root.elementIterator(); ie.hasNext();) {              System.out.println("======");              Element element = (Element) ie.next();              System.out.println(element.getName());                // 枚举属性              for (Iterator ia = element.attributeIterator(); ia.hasNext();) {                  Attribute attribute = (Attribute) ia.next();                  System.out.println(attribute.getName() + ":"                          + attribute.getData());              }              // 枚举当前节点下所有子节点              for (Iterator ieson = element.elementIterator(); ieson.hasNext();) {                  Element elementSon = (Element) ieson.next();                  System.out.println(elementSon.getName() + ":"                          + elementSon.getText());              }          }      }        /**      * 使用elements方法进行xml的读取,相当于条件查询,可以根据不同的节点,利用for循环查询该节点下所有的数据。      *       * @throws DocumentException      */      public static void traversalDocumentByElements(Document doc) {          // 获取根节点          Element root = doc.getRootElement();          // 根据根节点,将根节点下 student中的所有数据放到list容器中。          List list = root.elements("student");          // 这种遍历方式,是jdk1.5以上的版本支持的遍历方式,嘿嘿试试          for (Object obj : list) {              Element el = (Element) obj;              System.out.println("----------"+el.getName()+"-----------");              // 获取name节点下所有的内容,存入listName容器中              List listName = el.elements("name");              // 获取age节点下所有的内容,存入age容器中              List listAge = el.elements("age");              for (int i=0;i<listName.size();i++) {                  Element elname = (Element) listName.get(i);                  // 获取name节点下的数据。                  System.out.println(elname.getName() + ": " + elname.getText());                  Element elage = (Element) listAge.get(i);                  // 获取age节点下的数据。                  System.out.println(elage.getName() + ": " + elage.getText());                                }            }      }        /**      * 使用selectNodes读取xml文件      *       * @param args      * @throws DocumentException      */      public static void traversalDocumentByselectNodes(Document doc,              String elementpath) {          // 使用selectNodes获取所要查询xml的节点。          List list = doc.selectNodes(elementpath);            // 遍历节点,获取节点内数据。          for (Iterator ie = list.iterator(); ie.hasNext();) {              Element el = (Element) ie.next();              System.out.println(el.getName() + ": " + el.getText());            }        }    }

 

dom4j 创建XML文件