作者:小池子的思密达 | 来源:互联网 | 2023-05-19 12:55
这里写目录标题XMLExtensibleMarkupLanguageXML的约束DTDSchemaSchema约束上一级目录回退用..Dom4j解析XMLXPath直接定位属性或标
这里写目录标题
- XML Extensible Markup Language
- XML的约束 DTD Schema
- Schema约束
- 上一级目录回退 用..
- Dom4j 解析XML
- XPath 直接定位属性或标签(解决子标签太深的问题)导入相关类库
- Base64 64个字符来组成
- new String(byte[])
- 工厂模式(车工厂) 批量生产产品 批量生产对象 使用接口 是为了返回各种车的实现类 调用工厂类的方法来生产车,不需要自己new。生产车后可以重写接口的方法,使用车的功能
XML Extensible Markup Language
可扩展性的标记语言
编码存储为utf-8
既为开始又为结束
只允许有一个根标签
注释 在里面 ctrl+/
&less than
quotation 双引号
amd 与
character data 字符数字区
下面展示一些 内联代码片
。
// An highlighted block
柳岩
18
女
年龄 <> " &
年龄 <<<<<<<<<18 .>>>>
]]>
赵丽颖
15
女
PCDATA 只能是文本,不能是标签
下面展示一些 内联代码片
。
// An highlighted block books.xml
Java入门到超神
88.88
左神
下面展示一些 内联代码片
。
// An highlighted block bookshelf.dtd
下面展示一些 内联代码片
。
// An highlighted block books.xml
<书架
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
targetNamespace="http://www.itcast.cn/"
elementFormDefault="qualified">
上一级目录回退 用…
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 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下面
潘金莲
女
panpan@itcast.cn
武松
男
wusong@itcast.cn
武大狼
男
wuda@itcast.cn
下面展示一些 内联代码片
。
// 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 cOntacts= rootElement.elements("contact");
//创建集合保存所有的联系人对象 {id,vip,name,gender,email}
ArrayList 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
潘金莲
女
panpan@itcast.cn
武松
男
wusong@itcast.cn
武大狼
男
wuda@itcast.cn
XPath 直接定位属性或标签(解决子标签太深的问题)导入相关类库
调用对象就是. 相对路径
找属性,找元素。
Base64 64个字符来组成
苍老师
编码解码
方便在网络上传输。
苍老师文字根据这个变成数字 编码
类似字符集编码
new String(byte[])
工厂模式(车工厂) 批量生产产品 批量生产对象 使用接口 是为了返回各种车的实现类 调用工厂类的方法来生产车,不需要自己new。生产车后可以重写接口的方法,使用车的功能
//使用对象和创建对象是分开的,耦合性低
//拿来用就可以,有点像工具类
返回值是共同的接口。
这是多态的使用,不是让别人帮你创建对象