这里写目录标题
XML Extensible Markup Language
可扩展性的标记语言
编码存储为utf-8
既为开始又为结束
只允许有一个根标签
注释 在里面 ctrl+/
&less than
quotation 双引号
amd 与
character data 字符数字区
下面展示一些 内联代码片
。
// An highlighted block
<?xml version="1.0" encoding="utf-8" ?>
<persons>
<person>
<name>柳岩</name>
<age>18</age>
<sex>女</sex>
<detail>
年龄 < > " &
<![CDATA[
年龄 <<<<<<<<< 18 .>>>>
]]>
</detail>
</person>
<person>
<name>赵丽颖</name>
<age>15</age>
<sex>女</sex>
<address/>
</person>
</persons>
XML的约束 DTD Schema
PCDATA 只能是文本,不能是标签
下面展示一些 内联代码片
。
// An highlighted block books.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!--导入DTD约束-->
<!DOCTYPE books SYSTEM "bookshelf.dtd">
<books>
<book>
<name>Java入门到超神</name>
<price>88.88</price>
<author>左神</author>
</book>
<book>
<name></name>
<price></price>
<author></author>
</book>
</books>
下面展示一些 内联代码片
。
// An highlighted block bookshelf.dtd
<!ELEMENT books (book+)>
<!ELEMENT book (name,price,author)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT author (#PCDATA)>
Schema约束
下面展示一些 内联代码片
。
// An highlighted block books.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!--导入约束 修改命名空间-->
<书架
xmlns="http://www.itcast.cn/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.itcast.cn/ bookshelf.xsd">
<书>
<书名></书名>
<作者></作者>
<售价></售价>
</书>
</书架>
下面展示一些 内联代码片
。
// An highlighted block bookshelf.xsd
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.itcast.cn/"
elementFormDefault="qualified">
<xs:element name='书架'>
<xs:complexType>
<xs:sequence maxOccurs='unbounded'>
<xs:element name='书'>
<xs:complexType>
<xs:sequence>
<xs:element name='书名' type='xs:string'/>
<xs:element name='作者' type='xs:string'/>
<xs:element name='售价' type='xs:double'/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
上一级目录回退 用…
Dom4j 解析XML
下面展示一些 内联代码片
。
// An highlighted block
package day15XMLDom4jFactoryModelcommons_ioBase64.XML解析;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import javax.xml.parsers.SAXParser;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.List;
public class Demo1 {
public static void main(String[] args) throws FileNotFoundException, DocumentException {
SAXReader reader = new SAXReader(); //加强基本输入流,可以解析xml文件
Document document = reader.read(new FileInputStream("src\\bean\\Contact.xml"));
System.out.println("document = " + document);
Element rootElement = document.getRootElement();//获得根标签
System.out.println("rootElement = " + rootElement);
//获得根标签的名字
System.out.println("根标签的名字:"+rootElement.getName());
//获得第一个指定名称的子标签
Element firstContactEle = rootElement.element("contact");
System.out.println("firstContactEle = " + firstContactEle);
//获得id属性值
String id = firstContactEle.attributeValue("id");
System.out.println("id = " + id);
String vip = firstContactEle.attributeValue("vip");
System.out.println("vip = " + vip);
//获得所有当前名称的子标签
List<Element> elements = firstContactEle.elements();
//遍历集合获取每个元素
for (Element element : elements) {
String name = element.getName();
String text = element.getText();
System.out.println(name+"->"+text);
}
}
}
下面展示一些 内联代码片
。
// An highlighted block Contact放到src下面
<?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">
<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>
</contactList>
下面展示一些 内联代码片
。
// An highlighted block Demo.java
package day15XMLDom4jFactoryModelcommons_ioBase64.XML解析.XML解析2;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
public class Demo {
public static void main(String[] args) throws Exception {
//定义联系人类
//创建解析器
SAXReader reader = new SAXReader();
//解析XML
Document document = reader.read(new FileInputStream("itheima\\src\\Contact.xml"));
//得到根标签
Element rootElement = document.getRootElement();
//获得所有contact子标签
List<Element> contacts = rootElement.elements("contact");
//创建集合保存所有的联系人对象 {id,vip,name,gender,email}
ArrayList<Contact> list = new ArrayList<>();
//遍历获取每个contact标签,一个contact标签对应一个人
for (Element contact : contacts) {
String idStr = contact.attributeValue("id");
int id = Integer.parseInt(idStr);
String vipStr = contact.attributeValue("vip");
boolean vip = Boolean.parseBoolean(vipStr);
//直接获取子标签内容
// System.out.println(contact.getName()+contact.getText());
String name = contact.elementText("name");
String gender = contact.elementText("gender");
String email = contact.elementText("email");
//根据数据创建Contact联系人对象
Contact c = new Contact(id, vip, name, gender, email);
list.add(c);
}
//遍历集合
for (Contact contact : list) {
System.out.println(contact);
}
}
}
下面展示一些 内联代码片
。
// An highlighted block
package day15XMLDom4jFactoryModelcommons_ioBase64.XML解析.XML解析2;
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;
}
/**
* 获取
* @return id
*/
public int getId() {
return id;
}
/**
* 设置
* @param id
*/
public void setId(int id) {
this.id = id;
}
/**
* 获取
* @return vip
*/
public boolean isVip() {
return vip;
}
/**
* 设置
* @param vip
*/
public void setVip(boolean vip) {
this.vip = vip;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return gender
*/
public String getGender() {
return gender;
}
/**
* 设置
* @param gender
*/
public void setGender(String gender) {
this.gender = gender;
}
/**
* 获取
* @return email
*/
public String getEmail() {
return email;
}
/**
* 设置
* @param email
*/
public void setEmail(String email) {
this.email = email;
}
public String toString() {
return "Contact{id = " + id + ", vip = " + vip + ", name = " + name + ", gender = " + gender + ", email = " + email + "}";
}
}
下面展示一些 内联代码片
。
// An highlighted block
<?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">
<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>
</contactList>
XPath 直接定位属性或标签(解决子标签太深的问题)导入相关类库
调用对象就是. 相对路径
找属性,找元素。
Base64 64个字符来组成
苍老师
编码解码
方便在网络上传输。
苍老师文字根据这个变成数字 编码
类似字符集编码
new String(byte[])
工厂模式(车工厂) 批量生产产品 批量生产对象 使用接口 是为了返回各种车的实现类 调用工厂类的方法来生产车,不需要自己new。生产车后可以重写接口的方法,使用车的功能
//使用对象和创建对象是分开的,耦合性低
//拿来用就可以,有点像工具类
返回值是共同的接口。
这是多态的使用,不是让别人帮你创建对象