20220530_Java_XML文件_dom4j解析方法

博客介绍了使用Java进行XML文件解析的相关内容。需自行搜索dom4j框架包下载导入,使用Junit框架的@Test代替main方法也需下载导入。还给出了解析后存入对象输出案例等测试代码。

所用xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<contactList>
    <contact id="1" vip="true">
        <name> Joseph </name>
        <gender> male </gender>
        <email> joseph@heaven.com </email>
    </contact >
    <contact id="2" vip="false">
        <name> John </name>
        <gender> male </gender>
        <email> john@heaven.com </email>
    </contact>
    <contact id="3" vip="false">
        <name> Deborah </name>
        <gender> female </gender>
        <email> deborah@heaven.com </email>
    </contact>
    <user>
        <info>
            <group id="12" >
                <name id="10" > Michael </name>
            </group>
        </info>
    </user>
</contactList>

框架包自行搜索dom4j下载导入,使用Junit框架@Test代替main方法,也需下载导入
测试代码

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.jupiter.api.Test;

import java.io.InputStream;
import java.util.List;

public class Dom4jFirstDemo1 {
    @Test
    public void parseXML() throws Exception {
        /**创建一个dom4j解析器,使用dom4j框架*/
        SAXReader sax = new SAXReader();
//        Document doc = sax.read(new File("xml_app/src/contactList1.xml"));
//        Document doc = sax.read(new FileInputStream("xml_app/src/contactList1.xml"));
        /**
         * 直接到src下找文件的方法
         * 先用本类名获取类,用类的方法getResourceAsStream直接再src目录下找xml文件
         * 讲这个is传给sax.read方法获得源文件
         */
        InputStream is = Dom4jFirstDemo1.class.getResourceAsStream("/contactList1.xml");
        Document doc = sax.read(is);
        /**
         * 获取根元素
         * 获取子元素
         */
        Element root = doc.getRootElement();
        System.out.println(root.getName());

        List<Element> subEls = root.elements("contact");
        for (Element subEl : subEls) {
            System.out.println(subEl.getName());
            System.out.println(subEl.elementTextTrim("name"));//trim是剪掉前后空格
            System.out.println(subEl.elementTextTrim("gender"));
            System.out.println(subEl.elementTextTrim("email"));
            System.out.println("\r\n");

        }

        System.out.println("------divide line--------");
        Element subEl = root.element("user");//获取为改名字的第一个子元素
        System.out.println(subEl.elementText("group"));

        Attribute att = root.element("contact").attribute("id");
        Attribute att1 = root.element("contact").attribute("vip");
        System.out.println(att.getName()+"----->"+att.getValue());
        System.out.println(att1.getName()+"----->"+att1.getValue());

        Element el2 = subEls.get(1);//获取第二个元素
        Attribute att2 = el2.attribute("id");//获取第二个元素的属性
        Attribute att3 = el2.attribute("vip");
        System.out.println(att2.getName()+"----->"+att2.getValue());
        System.out.println(att3.getName()+"----->"+att3.getValue());
        
    }
}

解析后存入对象输出案例
联络人类

public class Liaison {
    private String name;
    private int id;
    private boolean vip;
    private char gender;
    private String email;

    public Liaison(String name, int id, boolean vip, char gender, String email) {
        this.name = name;
        this.id = id;
        this.vip = vip;
        this.gender = gender;
        this.email = email;
    }

    public Liaison() {
    }

    @Override
    public String toString() {
        return "Contact{" +
                "name='" + name + '\'' +
                ", id=" + id +
                ", vip=" + vip +
                ", gender=" + gender +
                ", email='" + email + '\'' +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public boolean isVip() {
        return vip;
    }

    public void setVip(boolean vip) {
        this.vip = vip;
    }

    public char getGender() {
        return gender;
    }

    public void setGender(char gender) {
        this.gender = gender;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

执行体

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.jupiter.api.Test;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class Dom4jDemo2 {
    /**解析一个联系人xml文件,存到对象中去*/
    @Test
    public void parseXMLCreateOb() throws Exception {
        SAXReader sx = new SAXReader();//生成解析器
        InputStream is = Dom4jDemo2.class.getResourceAsStream("/contactList1.xml");
        //生成源文件输入流
        Document dc = sx.read(is);//得到源文件
        Element root = dc.getRootElement();//得到根元素

        List<Element> subEls = root.elements("contact");//所有叫contact的根元素下的一级子元素存入集合
        List<Liaison> liaisons = new ArrayList<>();//准备将来要用的联络人集合

        for (Element subEl : subEls) {
            Liaison lia = new Liaison();//每次遍历到的一集子元素给建一个联络人对象

            lia.setName(subEl.elementTextTrim("name"));
            lia.setGender(subEl.elementTextTrim("gender").charAt(0));
            lia.setEmail(subEl.elementTextTrim("email"));
            //下面拿属性,必须attributeValue,否则报错
            lia.setId(Integer.valueOf(subEl.attributeValue("id")));
            lia.setVip(Boolean.valueOf(subEl.attributeValue("vip")));
            //联络人成员变量全set之后存入集合
            liaisons.add(lia);
        }
        //遍历联络人集合,输出打印
        for (Liaison liaison : liaisons) {
            System.out.println(liaison);
        }
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值