1、xml
1、xml特点、介绍:可扩展的标记语言
- 标记语言:标签描述的语言
- 可扩展:标签名可自定义
2、xml的作用
XML用来 存储和传输数据 的
- 不同软件之间进行数据传输
- 供某个软件存储和使用数据
3、XML的格式
- 文档声明:必须放在第一行,注释都只能方法文档声明后面
- 文档注释:没有单行注释,只有多行注释一种。格式<!-- 注释内容 -->
- 标签:
- 根标签:只有一个。没有“父类 标签
- 有标签体:<name>标签内容</name>。第一个<>叫开始标签,标签的属性必须放在开始标签里面
- 没有标签体:<title></title> 简写为 <title/>。可以添加属性:<title pro=".."/>
- 字符区:大量使用实体字符,降低可读性。字符区的内容全都是作为纯文本处理,IDEA快捷键:CD
- 实体字符:类似转义字符
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、方法
- Node SelectSingleNode("..."):找出
-end