DOM4J XML解析

来源:互联网 发布:c语言的编程环境 编辑:程序博客网 时间:2024/05/29 11:39

从文件中读取并解析xml

  1. xml文件module01.xml

    <?xml version="1.0" encoding="UTF-8"?>  <modules id="123">      测试    <module> 这个是module标签的文本信息</module>     哈哈哈 </modules> 
  2. xml测试

    import java.io.File;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class Test {    public static void main(String[] args) {        try{            SAXReader saxReader = new SAXReader();            Document document = saxReader.read(new File("D:/module01.xml"));//必须指定文件的绝对路径             //获取根节点对象              Element rootElement = document.getRootElement();                System.out.println("根节点名称:" + rootElement.getName());//获取节点的名称              System.out.println("根节点有多少属性:" + rootElement.attributeCount());//获取节点属性数目              System.out.println("根节点id属性的值:" + rootElement.attributeValue("id"));//获取节点的属性id的值              System.out.println("根节点内文本:" + rootElement.getText());//如果元素有子节点则返回空字符串,否则返回节点内的文本              //rootElement.getText() 之所以会换行是因为 标签与标签之间使用了tab键和换行符布局,这个也算是文本所以显示出来换行的效果。              System.out.println("根节点内文本(1):" + rootElement.getTextTrim());//去掉的是标签与标签之间的tab键和换行符等等,不是内容前后的空格              System.out.println("根节点子节点文本内容:" + rootElement.getStringValue()); //返回当前节点递归所有子节点的文本信息。              //获取子节点              Element element = rootElement.element("module");              if(element != null){                  System.out.println("子节点的文本:" + element.getText());//因为子节点和根节点都是Element对象所以它们的操作方式都是相同的              }              //但是有些情况xml比较复杂,规范不统一,某个节点不存在直接java.lang.NullPointerException,所以获取到element对象之后要先判断一下是否为空              rootElement.setName("root");//支持修改节点名称              System.out.println("根节点修改之后的名称:" + rootElement.getName());              rootElement.setText("text"); //同样修改标签内的文本也一样              System.out.println("根节点修改之后的文本:" + rootElement.getText());          } catch (Exception e) {                e.printStackTrace();            }        }}
  3. 运行结果:
    这里写图片描述

将XML字符串解析为Document

  1. 测试代码:

    import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.DocumentHelper;import org.dom4j.Element;public class Test1 {    public static void main(String[] args) {        try {            Document document = DocumentHelper.parseText("<?xml version=\"1.0\" encoding=\"UTF-8\"?><modules id=\"123\"><module> 这个是module标签的文本信息</module></modules>");            //获取根节点对象              Element rootElement = document.getRootElement();                System.out.println("根节点名称:" + rootElement.getName());//获取节点的名称              System.out.println("根节点有多少属性:" + rootElement.attributeCount());//获取节点属性数目              System.out.println("根节点id属性的值:" + rootElement.attributeValue("id"));//获取节点的属性id的值              System.out.println("根节点内文本:" + rootElement.getText());//如果元素有子节点则返回空字符串,否则返回节点内的文本              //rootElement.getText() 之所以会换行是因为 标签与标签之间使用了tab键和换行符布局,这个也算是文本所以显示出来换行的效果。              System.out.println("根节点内文本(1):" + rootElement.getTextTrim());//去掉的是标签与标签之间的tab键和换行符等等,不是内容前后的空格              System.out.println("根节点子节点文本内容:" + rootElement.getStringValue()); //返回当前节点递归所有子节点的文本信息。              //获取子节点              Element element = rootElement.element("module");              if(element != null){                  System.out.println("子节点的文本:" + element.getText());//因为子节点和根节点都是Element对象所以它们的操作方式都是相同的              }              //但是有些情况xml比较复杂,规范不统一,某个节点不存在直接java.lang.NullPointerException,所以获取到element对象之后要先判断一下是否为空              rootElement.setName("root");//支持修改节点名称              System.out.println("根节点修改之后的名称:" + rootElement.getName());              rootElement.setText("text"); //同样修改标签内的文本也一样              System.out.println("根节点修改之后的文本:" + rootElement.getText());         } catch (DocumentException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}
  2. 运行结果:
    这里写图片描述

XML解析进阶

  1. 简单版

    1. xml文件

      <?xml version="1.0" encoding="UTF-8"?>  <modules id="123">      <module>              <name>oa</name>          <value>系统基本配置</value>          <descript>对系统的基本配置根目录</descript>      </module>  </modules> 
    2. 测试代码

      public void test(){        try {            SAXReader saxReader = new SAXReader();              Document document = saxReader.read(new File("D:/module02.xml"));            Element rootElement = document.getRootElement();            Iterator<Element> modulesIterator = rootElement.elements("module").iterator();            while (modulesIterator.hasNext()) {                Element element = (Element) modulesIterator.next();                Element nameElement = element.element("name");                System.out.println(nameElement.getName()+":"+nameElement.getText());                Element valueElement = element.element("value");                System.out.println(valueElement.getName()+":"+valueElement.getText());                Element descriptElement = element.element("descript");                System.out.println(descriptElement.getName()+":"+descriptElement.getText());            }        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }//必须指定文件的绝对路径     }
    3. 运行结果
      这里写图片描述

  2. 稍微复杂版

    1. xml文件

      <?xml version="1.0" encoding="UTF-8"?>  <modules id="123">      <module>这个是module标签的文本信息</module>      <module id="">          <name>oa</name>          <value>系统基本配置</value>          <descript>对系统的基本配置根目录</descript>          <module>这个是子module标签的文本信息</module>      </module>      <module>          <name>管理配置</name>          <value>none</value>          <descript>管理配置的说明</descript>          <module id="106">              <name>系统管理</name>              <value>0</value>              <descript>Config</descript>              <module id="107">                  <name>部门编号</name>                  <value>20394</value>                  <descript>编号</descript>              </module>          </module>      </module>  </modules>  
    2. 测试代码

      public void test2(){        try {            SAXReader saxReader = new SAXReader();              Document document = saxReader.read(new File("D:/module03.xml"));            Element rootElement = document.getRootElement();            if (rootElement.elements("module") != null) {                List<Element> elements = rootElement.elements("module");                for (Element element : elements) {                    System.out.println("【1】" + element.getTextTrim());                    Element nameElement = element.element("name");                    if (nameElement != null) {                        System.out.println("   【2】" + nameElement.getName() + ":" + nameElement.getText());                    }                    Element valueElement = element.element("value");                    if (valueElement != null) {                        System.out.println("   【2】" + valueElement.getName() + ":" + valueElement.getText());                    }                     Element descriptElement = element.element("descript");                      if (descriptElement != null) {                        System.out.println("   【2】" + descriptElement.getName() + ":" + descriptElement.getText());                    }                    List<Element> subElementList = element.elements("module");                      for (Element subElement : subElementList) {                          System.out.println("   【2】" + subElement.getTextTrim());                         Element subnameElement = subElement.element("name");                          if (subnameElement != null) {                            System.out.println("      【3】" + subnameElement.getName() + ":" + subnameElement.getText());                         }                        Element subvalueElement = subElement.element("value");                         if (subvalueElement != null) {                            System.out.println("      【3】" + subvalueElement.getName() + ":" + subvalueElement.getText());                        }                        Element subdescriptElement = subElement.element("descript");                          if (subdescriptElement != null) {                            System.out.println("      【3】" + subdescriptElement.getName() + ":" + subdescriptElement.getText());                         }                    }                  }            }        } catch (Exception e) {            // TODO: handle exception            e.printStackTrace();        }    }
    3. 运行结果
      这里写图片描述

XML文件生成

  1. 测试代码:

    public void test3(){        try {            Document document = DocumentHelper.createDocument();            //添加节点信息              Element rootElement = document.addElement("modules");              //这里可以继续添加子节点,也可以指定内容              rootElement.setText("这个是module标签的文本信息");              Element element = rootElement.addElement("module");              Element nameElement = element.addElement("name");              Element valueElement = element.addElement("value");              Element descriptionElement = element.addElement("description");              nameElement.setText("名称");              nameElement.addAttribute("language", "java");//为节点添加属性值              valueElement.setText("值");              valueElement.addAttribute("language", "c#");              descriptionElement.setText("描述");              descriptionElement.addAttribute("language", "sql server");              System.out.println(document.asXML()); //将document文档对象直接转换成字符串输出              Writer fileWriter = new FileWriter("d:\\module.xml");              //dom4j提供了专门写入文件的对象XMLWriter              XMLWriter xmlWriter = new XMLWriter(fileWriter);              xmlWriter.write(document);              xmlWriter.flush();              xmlWriter.close();              System.out.println("xml文档添加成功!");        } catch (Exception e) {            // TODO: handle exception            e.printStackTrace();        }    }
  2. 运行结果,生成文档module.xml
    这里写图片描述
0 0
原创粉丝点击