首页 > 其他分享 >dom4j解析和生成xml文件

dom4j解析和生成xml文件

时间:2023-02-16 19:45:44浏览次数:42  
标签:xml dom4j empEle list emp new 解析 Emp

解析xml大致步骤:

1: 创建SAXReader;

2: 使用SAXReader解析指定的xml文档信息,并返回对应Document对象。Document对象中就包含了该xml文中的所有信息以及结构了。

3: 根据文档结构将xml描述的树状信息读取到 。

现有emp.xml文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<list>
  <emp id="1">
    <name>提利昂·兰尼斯特</name>
    <age>25</age>
    <gender>男</gender>
    <salary>5000</salary>
  </emp>
  <emp id="2">
    <name>卡丽熙</name>
    <age>27</age>
    <gender>女</gender>
    <salary>6000</salary>
  </emp>
  <emp id="3">
    <name>琼恩·雪诺</name>
    <age>28</age>
    <gender>男</gender>
    <salary>7000</salary>
  </emp>
  <emp id="4">
    <name>布兰·斯塔克</name>
    <age>22</age>
    <gender>男</gender>
    <salary>8000</salary>
  </emp>
  <emp id="5">
    <name>nightKing</name>
    <age>26</age>
    <gender>未知</gender>
    <salary>9000</salary>
  </emp>
</list>

新建一个emp实体类,用于接收解析数据:

public class Emp {
    private int id;
    private String name;
    private int age;
    private String gender;
    private int salary;
    public Emp(){
        
    }
  public Emp(int id,String name,int age,String gender,int salary){
        super();
        this.id = id;
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.salary = salary;
  }
  //get,set略
}
public class ParseXmlDemo {
  public static List getXml(){
   try {
       SAXReader reader=new SAXReader();
       Document doc=reader.read(new File("emp.xml"));
       List<Emp> list=new ArrayList<Emp>();
       /*
        * 解析第一步,获取根标签(根元素)
        * 这里获取的根标签就相当于是<list>...</list>
        * 那对标签。
        */
       Element root=doc.getRootElement();
       //获取名为"emp"的标签
       List<Element> elementList=root.elements("emp");
       //遍历每一个emp标签
       for(Element empEle:elementList){
        //获取name
        String name=empEle.elementText("name");
        int age=Integer.parseInt(empEle.elementText("age"));
        String gender=empEle.elementText("gender");
        int salary=Integer.parseInt(empEle.elementText("salary"));
        //属性
        Attribute attr=empEle.attribute("id");
        int id=Integer.parseInt(attr.getValue());
        Emp emp=new Emp(id,name,age,gender,salary);
        list.add(emp);
       }
       return list;
    } catch (Exception e) {
       // TODO: handle exception
       System.out.println(e.toString());
   }
    return null;
}
  public static void main(String[] args) {
    List list=ParseXmlDemo.getXml();
    System.out.println(list.toString());
  }
}

输出结果:

1,提利昂·兰尼斯特,25,男,5000, 
2,卡丽熙,27,女,6000,
3,琼恩雪诺,28,男,7000, 
4,布兰斯塔克,22,男,8000, 
5,nightKing,26,未知,9000

生成xml大致步骤:

1: 创建一个Document对象,表示一个空的xml文档;

2: 向Document中添加根元素;

3: 按照目标xml文档的结构顺序向根元素中添加子元素来组建该结构;

4: 创建XMLWriter;

5: 设置低级流;

6: 使用XMLWriter将Document写出来生成 该文档 。

public class WriteXmlDemo {
  public static void main(String[] args) {
    try {
      List<Emp> list= new ArrayList<Emp>();
      list.add(new Emp(1,"鸣人",25,"男",4000));
      list.add(new Emp(2,"小樱",27,"女",6000));
      list.add(new Emp(3,"佐助",28,"男",7000));
      list.add(new Emp(4,"雏田",22,"女",8000));
      list.add(new Emp(5,"卡卡西",26,"男",90001));
      Document doc = DocumentHelper.createDocument();
      //生成根元素
      Element root = doc.addElement("list");
      for(Emp emp : list){
         //根标签下添加子标签
         Element empEle= root.addElement("emp");
         //向emp标签中添加子标签name
         Element nameEle= empEle.addElement("name");
         //标签赋值
         nameEle.addText(emp.getName());                
         Element ageEle = empEle.addElement("age");
         ageEle.addText(emp.getAge()+"");
         Element genderEle = empEle.addElement("gender");
         genderEle.addText(emp.getGender());
         Element salaryEle = empEle.addElement("salary");
         salaryEle.addText(emp.getSalary()+"");
         //添加属性
         empEle.addAttribute("id", emp.getId()+"");
     }
     //org.dom4j.XMLWriter
     XMLWriter writer = new XMLWriter(
     OutputFormat.createPrettyPrint());
 
     /*
      * 向文件myemp.xml中写出数据
      */
     FileOutputStream fos= new FileOutputStream("myemp.xml");
     writer.setOutputStream(fos);
     writer.write(doc);
     writer.close();
    } catch (Exception e) {
     e.printStackTrace();
   }
 }
}

生成myemp.xml:

<?xml version="1.0" encoding="UTF-8"?>
 
<list>
  <emp id="1">
    <name>鸣人</name>
    <age>25</age>
    <gender>男</gender>
    <salary>4000</salary>
  </emp>
  <emp id="2">
    <name>小樱</name>
    <age>27</age>
    <gender>女</gender>
    <salary>6000</salary>
  </emp>
  <emp id="3">
    <name>佐助</name>
    <age>28</age>
    <gender>男</gender>
    <salary>7000</salary>
  </emp>
  <emp id="4">
    <name>雏田</name>
    <age>22</age>
    <gender>女</gender>
    <salary>8000</salary>
  </emp>
  <emp id="5">
    <name>卡卡西</name>
    <age>26</age>
    <gender>男</gender>
    <salary>90001</salary>
  </emp>
</list>

 

标签:xml,dom4j,empEle,list,emp,new,解析,Emp
From: https://www.cnblogs.com/zrboke/p/17128060.html

相关文章

  • Epoll原理解析--网卡接收数据说起
     转至 https://blog.csdn.net/armlinuxww/article/details/92803381 太重要了怕丢失,冒昧转一下  从网卡接收数据说起下边是一个典型的计算机结构图,计算机由CPU......
  • python处理xml文件
    #pipinstallpyyaml环境里先安装包importxml.dom.minidomdom=xml.dom.minidom.parse('config.xml')root=dom.documentElementdefxml(suser):suser=......
  • 解析MYSQL建表语句,生成表结构的JSON
    根据建表语句解析表结构,并将表结构解析为JSON。根据MYSQL的建表语句,建表语句:CREATETABLE`TEST`(`ID`varchar(56)NOTNULL,`CREAETE_TIME`datetimeN......
  • 数据解析-正则匹配
    一、正则基础1、为什么使用正则需求判断一个字符串是否是手机号解决编写一个函数,给函数一个字符串,如果是手机号则返回True,否则返回False代码defisPhone(phon......
  • 【android】音视频开发五:学习MediaExtractor 和 MediaMuxer,知道如何解析和封装 mp4 文
    MediaExtractorMediaExtractor顾名思义就是多媒体提取器,主要负责:获取媒体文件的格式,包括音视频轨道,编码格式,宽高,采样率,声道数等,分离音频流,视频流,读取分离后的音视频数据......
  • PHP 之自定义模板解析
    一、解析列表1、效果图 2、示例代码<?phpinclude_once'parse.func.php';$data=array(array('scode'=>2,'link'=>'https://www.b......
  • 高保真数字麦克风模块解决方案特色解析
    积累 在音频领域算是有一些积累了。陆陆续续做了不少方案。可很多都是非标准的。把所做的产品标准化,是接下来的一个中心任务。公司的数字降噪麦克风模块自从去年推出以......
  • 《分布式技术原理与算法解析》学习笔记Day13
    分布式计算模式:MapReduce什么是分治法?分治法是将一个复杂、难以直接解决的大问题,分割成一些规模小、可以比较简单或者直接求解的子问题,这些子问题之间相互独立且与原问题......
  • 【Spring IOC】【三】容器源码解析- 创建原始Bean
    1 前言上一文,我们讲解了getBean里的一些过程,这节我们详细来讲一讲创建bean,也就是createBean。createBean默认的实现类是AbstractAutowireCapableBeanFactory,createBean......
  • Leetcode736 Lisp语法解析
      解法主要有两项工作:1、处理作用域(栈或递归);2、顺序处理逻辑:(1)根据分隔符将语句拆解为token;(2)根据关键字的运算逻辑定义状态,设计自动机;(3)从左至右逐个解析......