1、xml

1、xml特点、介绍:可扩展的标记语言

  1. 标记语言:标签描述的语言
  2. 可扩展:标签名可自定义

 

2、xml的作用

     XML用来 存储和传输数据

  1. 不同软件之间进行数据传输
  2. 供某个软件存储和使用数据

 

3、XML的格式

  1. 文档声明:必须放在第一行,注释都只能方法文档声明后面
  2. 文档注释:没有单行注释,只有多行注释一种。格式<!--  注释内容 -->
  3. 标签:
    1. 根标签:只有一个。没有“父类 标签
    2. 有标签体:<name>标签内容</name>。第一个<>叫开始标签,标签的属性必须放在开始标签里面
    3. 没有标签体:<title></title>  简写为  <title/>。可以添加属性:<title pro=".."/>
  4. 字符区:大量使用实体字符,降低可读性。字符区的内容全都是作为纯文本处理,IDEA快捷键:CD
  5. 实体字符:类似转义字符

        

4、XML 的约束(了解导入即可)

1、DTD 约束

 

2、Schema 约束

 

2、DOM 解析

 

1、方法

 

2、案例

XML代码
<?xml version="1.0" encoding="UTF-8"?>

<contactList>
    <contact id="1" vip="true">
        <name>潘金莲</name>
        <gender>女</gender>
        <email>panpan@itcast.cn</email>
    </contact>
    <contact id="2" vip="false">
        <name>武松</name>
        <gender id="1000">男</gender>
        <email>wusong@itcast.cn</email>
    </contact>
    <contact id="3">
        <name>武大狼</name>
        <gender>男</gender>
        <email>wuda@itcast.cn</email>
    </contact>
    <message>
        <name>小王</name>
    </message>
    <name>老王</name>
</contactList>
Contact对象类
// 联系人类,保存联系人的信息
public class Contact {
    private int id;
    private boolean vip;
    private String name;
    private String gender;
    private String email;

    public Contact() {
    }

    public Contact(int id, boolean vip, String name, String gender, String email) {
        this.id = id;
        this.vip = vip;
        this.name = name;
        this.gender = gender;
        this.email = email;
    }
    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 String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getGender() {
        return gender;
    
    public void setGender(String gender) {
        this.gender = gender;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }

    public String toString() {
        return "Contact{id = " + id + ", vip = " + vip + ", name = " + name + ", gender = " + gender + ", email = " + email + "}";
    }
}
测试类
public class Dom4jDemo {
    public static void main(String[] args) throws DocumentException {
        // 1、创建解析器
        SAXReader saxReader = new SAXReader();
        // 2、使用解析器解析xml
        Document document = saxReader.read(new File("firstPart//src/xml_dom4j_设计模式/dom4j/Contact.xml"));
        // 3、获取到根元素
        Element rootElement = document.getRootElement();
        // 获取元素名称
//        String rootName = rootElement.getName();
//        System.out.println(rootName);

        // 获取子元素只能一级一级获取,不能越级
        // 获取一个指定名称的子元素
//        Element contact = rootElement.element("contact");
//        System.out.println(contact.getName());
        // 获取当前元素的所有子元素
//        List<Element> elementList = rootElement.elements();
//        for (Element element : elementList) {
//            System.out.println(element.getName());
//        }

        // 4、获取所有指定名称的子元素
        List<Element> contacts = rootElement.elements("contact");
        // 5、创建存储集合存储
        List<Contact> contactsList = new ArrayList<>();

        // 6、遍历子元素集合
        for (Element contact : contacts) {
            // 通过属性名获取属性值
            int id = Integer.parseInt(contact.attributeValue("id"));
            boolean vip = Boolean.parseBoolean(contact.attributeValue("vip"));

            // 通过指定名称的子元素获取到文本
            List<Element> elements = contact.elements();
            String elementName = contact.elementText(elements.get(0).getName());
            String elementGender = contact.elementText(elements.get(1).getName());
            String elementEmail = contact.elementText(elements.get(2).getName());

            // 存储到 Contact 集合中
            contactsList.add(new Contact(id, vip, elementName, elementGender, elementEmail));
        }

        for (Contact contact : contactsList) {
            System.out.println(contact);
        }
    }
}
/*
Contact{id = 1, vip = true, name = 潘金莲, gender = 女, email = panpan@itcast.cn}
Contact{id = 2, vip = false, name = 武松, gender = 男, email = wusong@itcast.cn}
Contact{id = 3, vip = false, name = 武大狼, gender = 男, email = wuda@itcast.cn}
*/

 

3、XPath 解析(重要

1、方法

  1. Node SelectSingleNode("..."):找出

 

 

-end