xml中的Document和Attribute

1.Document

导入dom4j的步骤

  1. 去官网下载 zip 包。http://www.dom4j.org/
    在这里插入图片描述
  2. 在项目中创建一个文件夹:lib
  3. 将dom4j-2.1.1.jar文件复制到 lib 文件夹
  4. 在jar文件上点右键,选择 Add as Library -> 点击OK
  5. 在类中导包使用

得到Document对象

步骤:

文件Contact.xml放在src目录下

  1. 创建一个SAXReader对象,用于读取 xml 文件
  2. 从类路径下加载xml文件,得到输入流对象
  3. 通过 SAXReader对象的read(InputStream in )方法,从输入流中读取,生成文档对象
代码
/**
 1. 得到文档对象
 2. 得到根元素
 */
    public static void main(String[] args) throws FileNotFoundException, DocumentException {
        //1. 创建类: 读取XML文件
        SAXReader reader = new SAXReader();
        //不建议这么写
        //FileInputStream in = new FileInputStream("D:\\IdeaWork\\JavaEE105\\day23-xml\\src\\Contacts.xml");
        //src目录就是编译以后的类路径,从类路径下得到输入。
        InputStream in = Demo3Document.class.getResourceAsStream("/Contacts.xml");
        //2.通过reader来读取xml, 生成了一个document对象
        Document document = reader.read(in);
        //3. 输出文档
        System.out.println(document);
        //4. 得到文档以后,通过文档得到根元素
        Element rootElement = document.getRootElement();
        System.out.println(rootElement);
    }
Document常用方法
方法名功能说明
Element getRootElement()通过文档对象得到根元素
String getName()获取元素名
List<Element> elements()获取所有子元素
List<Element> elements(String name)获取知名名字的多个子元素

2.Attribute

Attribute常用方法:

方法名功能说明
String getName()得到属性的名字
String getValue()得到属性的值

得到属性值的两种方式

  1. 先得到Attribute对象,再通过Attribute对象得到属性的值
  2. 通过方法attributeValue()直接得到属性值

案例:

  1. 使用2种方式,得到contact上id属性值
  2. 在contact元素上添加一个vip的属性值为true/false,得到contact上所有的属性名和属性值

效果
在这里插入图片描述

代码:

 public static void main(String[] args) throws DocumentException {
        //1. 创建SAXReader
        SAXReader reader = new SAXReader();
        //2. 调用read 方法,读取 xml 文件
        Document document = reader.read(Demo4Attribute.class.getResourceAsStream("/Contacts.xml"));
        //3. 得到根元素
        Element rootElement = document.getRootElement();
        //4. 获得第1个contact元素对象
        Element contact = rootElement.element("contact");
        //5. 通过方式1:得到contact上id属性值
        Attribute idAttr = contact.attribute("id");
        String idValue = idAttr.getValue();
        System.out.println(idValue);
        //6. 通过方式2:得到contact上id属性值
        String id = contact.attributeValue("id");
        System.out.println(id);
        //7. 得到contact上所有的属性名和属性值
        List<Attribute> attributes = contact.attributes();
        for (Attribute attribute : attributes) {
            System.out.println("属性名:" + attribute.getName());
            System.out.println("属性值:" + attribute.getValue());
        }
    }

获取文本内容
通过元素对象得到文本字符串得到文本元素的前提:先得到元素对象

  • 注意:

空格、换行、制表符:也是属于文本的一部分,所以在解析xml文件的时候,格式化XML文件要注意。

元素中得到文本有关的方法

Element**元素中的方法说明
String getText()得到元素中文本
String elementTextTrim(元素名)得到子元素中文本,去掉先后空格
String elementText(元素名)得到子元素中文本

需求
得到第1个contact中的name元素,输出name元素的文本。分别通过下面三个方法得到:

  1. 通过getText()方法得到
  2. 直接得到元素的内容
  3. 得到去掉空格的文本

代码;

public static void main(String[] args) throws DocumentException {
        // 1.创建SAXReader
        SAXReader reader = new SAXReader();
        // 2.调用read 方法,读取 xml 文件
        Document document = reader.read(Demo5Text.class.getResourceAsStream("/Contacts.xml"));
        // 3.得到根元素
        Element rootElement = document.getRootElement();
        // 得到contact标签
        Element contact = rootElement.element("contact");
        // 得到name标签中的文本
        Element name = contact.element("name");
        System.out.println(name.getText());
        // 得到子元素的文本
        System.out.println(contact.elementText("name"));
        // 得到子元素的文本并且去掉前后空格
        System.out.println(contact.elementTextTrim("name"));
    }

XML解析案例

目标

利用 Dom4j 的知识,将Contact.xml 文件中的联系人数据封装成List集合,其中每个元素是实体类Contact。打印输出 List 中的每个元素。

运行效果

在这里插入图片描述

数据准备
Contact.xml
<?xml version="1.0" encoding="UTF-8"?>
<contactList>
    <contact id="1">
        <name>潘金莲</name>
        <gender></gender>
        <email>panpan@itcast.cn</email>
    </contact>
    <contact id="2">
        <name>武松</name>
        <gender></gender>
        <email>wusong@itcast.cn</email>
    </contact>
    <contact id="3">
        <name>武大狼</name>
        <gender></gender>
        <email>wuda@itcast.cn</email>
    </contact>
</contactList>
Contact.java实体类
 //  联系人实体类
public class Contact {
    private int id;
    private String name;
    private String gender;
    private String email;
    //  省略构造方法get、set、tostring
    }

代码:

public static void main(String[] args) throws DocumentException {
        //1. 得到SaxReader
        SAXReader reader = new SAXReader();
        //2. 得到文档对象
        Document document = reader.read(Demo6Contact.class.getResourceAsStream("/Contact.xml"));
        //3. 得到根元素
        Element rootElement = document.getRootElement();
        //4. 创建集合
        List<Contact> list = new ArrayList<>();
        //5. 得到所有联系人
        List<Element> contactElements = rootElement.elements();
        //每个就是一个联系人
        for (Element contactElement : contactElements) {
            //创建一个联系人
            Contact contact = new Contact();
            //System.out.println(contactElement.getName());  //打印标签名
            //得到id属性值,将字符串转成int类型
            int id = Integer.parseInt(contactElement.attributeValue("id"));
            contact.setId(id);
            //得到子元素中文本
            contact.setName(contactElement.elementText("name"));
            contact.setGender(contactElement.elementText("gender"));
            contact.setEmail(contactElement.elementText("email"));
            //将当前对象添加到集合中
            list.add(contact);
        }
        //打印集合中所有的联系人
        for (Contact contact : list) {
            System.out.println(contact);
        }
    }
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

itzhuzhu.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值