目录
阶段2:从网页搭建入门Java Web
1:前端基础之HTML与CSS
2:前端基础之JavaScript与综合案例
3:Java Web基础
第一节:XML是什么
XML是什么
XML与HTML的比较:xml没有预定义的标签
XML的用途
XML文档结构
XML声明
我的第一份XML
XML标签书写规则
处理理特殊字符
XML支持五种实体引用
CDATA标签:不做xml解析,原意输出
XML语义约束
Document Type Definition
DTD定义节点
DTD定义节点数量
XML引用DTD文件
创建DTD文件
XML Schem
引入Schem:在根节点引入
DOM文档对象模型
Dom4j
利用Dom4j遍历XML
利用Dom4j更新XML
XPath路径表达式
XPath基本表达式
XPath基本表达式案例
XPath谓语表达式
编辑
XPath实验室
Jaxen介绍
4:常用功能与过滤器
第1节 JSON入门
5:监听器与项目实战
package file;
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) {
//创建File对象
//File file1=new File("c:\\imooc\\io\\score.txt");
//File file1=new File("c:\\imooc","io\\score.txt");
File file=new File("d:\\imooc");
File file1=new File(file,"io\\score.txt");
//判断是文件还是目录
System.out.println("是否是目录"+file1.isDirectory());
System.out.println("是否是文件"+file1.isFile());
//创建文件
File file2=new File("d:\\imooc\\io");
if(!file2.exists()) {
file2.mkdirs();
}
//创建文件
if(!file1.exists()) {
try {
file1.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
绝对路径:是从盘符开始的路径
相对路径:是从当前路径开始的路劲
package file;
import java.io.File;
import java.io.IOException;
public class FileDemo1 {
public static void main(String[] args) {
// File f=new File("c:\\imooc\\java\\thread\\thread.txt");
// System.out.println(f.exists());
File f=new File("thread.txt");
try {
f.createNewFile();
//判断是否是绝对路径
System.out.println(f.isAbsolute());
//获取相对路径,也是file构造函数的路径
System.out.println(f.getPath());
//获取绝对路径
System.out.println(f.getAbsolutePath());
//获取文件名
System.out.println(f.getName());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
字节输入流InputStream
字节输出流OutputStream
从文件系统中的某个文件中获得输入字节
用于读取诸如图像数据之类的原始字节流
package fileInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputDemo1 {
public static void main(String[] args) {
//创建一个FileInputStream对象
try {
FileInputStream fis=new FileInputStream("imooc.txt");
// int n=fis.read();
int n=0;
// while(n!=-1){
// System.out.print((char)n);
// n=fis.read();
// }
while((n=fis.read())!=-1){
System.out.print((char)n);
}
fis.close();
}catch (FileNotFoundException e) {
e.printStackTrace();
} catch(IOException e){
e.printStackTrace();
}
}
}
FileInputStream:read(byte[] b) 字节数组转换为字符串new String(byte[] b)
package fileInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputDemo2 {
public static void main(String[] args) {
// 创建一个FileInputStream对象
try {
FileInputStream fis = new FileInputStream("imooc.txt");
byte[] b=new byte[100];
fis.read(b,0,5);
System.out.println(new String(b));
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
package io;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputDemo {
public static void main(String[] args) {
FileOutputStream fos;
FileInputStream fis;
try {
fos = new FileOutputStream("imooc.txt",true);//true表示追加
fis=new FileInputStream("imooc.txt");
fos.write(50);//文件变为2
fos.write('a');
System.out.println(fis.read());
System.out.println((char)fis.read());//读出来又是50
fos.close();
fis.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
package io;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputDemo1 {
public static void main(String[] args) {
// 文件拷贝
try {
FileInputStream fis=new FileInputStream("happy.gif");
FileOutputStream fos=new FileOutputStream("happycopy.gif");
int n=0;
byte[] b=new byte[1024];
while((n=fis.read(b))!=-1){
fos.write(b,0,n);//标记写入大小,fos.write文件往往会变大
}
fis.close();
fos.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
}
package io;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class ReaderDemo {
public static void main(String[] args) {
try {
FileInputStream fis=new FileInputStream("imooc.txt");
InputStreamReader isr=new InputStreamReader(fis,"GBK");
//可以用FileReader代替上面这两步
BufferedReader br=new BufferedReader(isr);
FileOutputStream fos=new FileOutputStream("imooc1.txt");
OutputStreamWriter osw=new OutputStreamWriter(fos,"GBK");
BufferedWriter bw=new BufferedWriter(osw);
int n=0;
char[] cbuf=new char[10];
// while((n=isr.read())!=-1){
// System.out.print((char)n);//char数组也是通过(char)
// }
// while((n=isr.read(cbuf))!=-1){
// String s=new String(cbuf,0,n);//string类型支持char数组的偏移量
osr.writer(s,0,n)
// System.out.print(s);
// }
while((n=br.read(cbuf))!=-1){
//String s=new String(cbuf,0,n);
bw.write(cbuf, 0, n);
bw.flush();
}
fis.close();
fos.close();
isr.close();
osw.close();
br.close();
bw.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
步骤:
-创建一个类,继承Serializable接口
-创建对象
-将对象写入文件
-从文件读取对象信
package io;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class GoodsTest {
public static void main(String[] args) {
// 定义Goods类的对象
Goods goods1 = new Goods("gd001", "电脑", 3000);
try {
FileOutputStream fos = new FileOutputStream("imooc.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
FileInputStream fis = new FileInputStream("imooc.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
// 将Goods对象信息写入文件
oos.writeObject(goods1);
oos.writeBoolean(true);
oos.flush();
// 读对象信息
try {
Goods goods = (Goods) ois.readObject();
System.out.println(goods);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(ois.readBoolean());
fos.close();
oos.close();
fis.close();
ois.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
XML的全称是EXtensible Markup Language,可扩展标记语言
编写XML就是编写标签,与HTML非常类似,扩展名.xml
良好的人机可读性
hr.xml
张三
31
178
html:
首页
xml:
三年级
1班
三年级
2班
第一行必须是XML声明。
有且只有一个根节点。
XML标签的书写规则与HTML相同。
XML声明说明XML文档的基本信息,包括版本号与字符集,写在 XML第一行。
version 代表版本号1.0/1.1
encoding UTF-8设置字符集,用于支持中文
李铁柱
37
3600
人事部
XX大厦-B105
林海
50
7000
财务部
XX大厦-B106
安娜
24
4600
人事部
XX大厦-B105
张晓宇
29
3000
后勤部
XX大厦-B108
赵子轩
19
1500
后勤部
XX大厦-B108
张晓璇
20
1700
后勤部
XX大厦-B108
张檬
43
8700
会计部
XX大厦-B103
李梅
33
8700
工程部
XX大厦-B104
张三
31
4000
会计部
XX大厦-B103
李四
23
3000
工程部
XX大厦-B104
合法的标签名
适当的注释与缩进
合理使用属性
特殊字符与CDATA标签
有序的子元素
标签体中,出现"<",">"特殊字符,会破坏文档结构。 处理特殊字符
解决方案1:使用实体引用。
解决方案2:使用CDATA标签。
无效的XML:
1+4<3是否正确?
3+5>8是否正确?
CDATA 指的是不应由 XML 解析器进行解析 的文本数据 CDATA标签
从"<[!CDATA["开始,到"]]>"结束
首页
]]>
XML文档结构正确,但可能不是有效的。
例如,员工档案XML中绝不允许出现”植物品种” 标签。
XML语义约束就是用于规定XML文档中允许 出现哪些元素。
XML语义约束有两种定义方式:DTD与XML Schema。
DTD文件的扩展名为.dtd。
DTD(Document Type Definition,文档类型定义)是 一种简单易用的语义约束方式。
hr.dtd
...
如某个子节点需要多次重复出现,则需要在子节点后 增加相应的描述符。
书写格式:
示例:
#标签 属性 类型 默认值
XML Schema比DTD更为复杂,提供了更多功能。
XML Schema 提供了数据类型、格式限定、数据范围等特性。
XML Schema 是 W3C 标准。
#定义一个简单的数据类型
#通过整型去约束
张三
31
4000
会计部
XX大厦-B103
李四
23
3000
工程部
XX大厦-B104
Dom4j是一个易用的、开源的库,用于解析XML。它 应用于Java平台,具有性能优异、功能强大和极其易使 用的特点。
Dom4j将XML视为Document对象。
XML标签被Dom4j定义为Element对象。
dom4j
dom4j
1.6.1
package xml.dom4j;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.List;
public class HrReader {
public static void main(String[] args) {
File flie = new File("D:\\develop\\IdeaProjects\\hr.xml");
//SAXReader类是xml文件的核心类,用于将xml解析后以“树”的形式保存在内存中
SAXReader saxReader = new SAXReader();
try {
Document read = saxReader.read(flie);
//获取xml文档的根节点,即hr标签
Element rootElement = read.getRootElement();
//elements方法用于获取指定标签的集合
List employees = rootElement.elements("employee");
for (Element employee : employees) {
//element方法用于获取位于的子节点对象
Element name = employee.element("name");
//getText()方法用于获取标签文本
String text = name.getText();
System.out.println(text);
System.out.println(employee.elementText("age"));
System.out.println(employee.elementText("salary"));
Element department = employee.element("department");
System.out.println(department.element("dname").getText());
System.out.println(department.element("address").getText());
Attribute no = employee.attribute("no");
System.out.println(no.getText());
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
package xml.dom4j;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.*;
public class HrWriter {
public static void main(String[] args) {
File flie = null;
SAXReader saxReader = new SAXReader();
try {
flie = new File("D:\\develop\\IdeaProjects\\hr.xml");
Document read = saxReader.read(flie);
Element rootElement = read.getRootElement();
Element employee = rootElement.addElement("employee");
employee.addAttribute("no", "3311");
Element name = employee.addElement("name");
name.setText("陈文静");
Element age = employee.addElement("age");
age.setText("24");
employee.addElement("salary").setText("10000");
Element department = employee.addElement("department");
department.addElement("dname").setText("心理部");
department.addElement("address").setText("金康大厦");
Writer writer = new OutputStreamWriter(new FileOutputStream(flie),"utf-8");
read.write(writer);
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
XPath路径表达式是XML 文档中查找数据的语言。 XPath路径表达式
掌握XPath可以极大的提高在提取数据时的开发效率。
学习XPath本质就是掌握各种形式表达式的使用技巧。
最常用的基本表达式
利用Dom4j开发“XPath实验室”,一起见证XPath 神奇之处。
Jaxen是一个Java编写的开源的XPath库。这是适应多 种不同的对象模型,包括DOM,XOM,dom4j和 JDOM。
Dom4j底层依赖Jaxen实现XPath查询
jaxen
jaxen
1.1.6
package xml.dom4j;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import java.util.List;
public class XPathTestor {
public void xpath(String xpathExp){
String file = "D:\\develop\\IdeaProjects\\hr.xml";
SAXReader saxReader = new SAXReader();
try {
Document document = saxReader.read(file);
//selectNodes()方法用来查询xpath语句
//Node类型表示包含属性和节点
List nodes = document.selectNodes(xpathExp);
for (Node node : nodes) {
Element emp = (Element)node;
System.out.println(emp.attribute("no").getText());
System.out.println(emp.elementText("name"));
System.out.println(emp.elementText("age"));
System.out.println(emp.elementText("salary"));
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
XPathTestor xPathTestor = new XPathTestor();
// xPathTestor.xpath("/hr/employee");
// xPathTestor.xpath("//employee");
// xPathTestor.xpath("//employee[salary<4000]");
// xPathTestor.xpath("//employee[name='陈文静']");
// xPathTestor.xpath("//employee[@no=3311]");
// xPathTestor.xpath("//employee[1]");
// xPathTestor.xpath("//employee[last()]");
// xPathTestor.xpath("//employee[position<6()]");
// |合并输出
xPathTestor.xpath("//employee[3] | //employee[8] ");
}
}
数值由键(key):值(value)描述,由逗号分隔
大括号表示一个完整的对象,拥有多个键/值对
中括号保存数组,多个对象之间使用逗号分隔
Insert title here