📄 复习5.txt
字号:
xml:
1、xml
1、作用:用于传输数据,html用于显示数据,xml在数据交换、配置文件中
用的非常多。
html中标签是固定不变而xml中的标签可以自定义。
2、元素:
节点:
标签
属性
文本:
标签中的值
<customer customerID="1">
<customerName>张ddd三</customeName>
</customer>
3、正规的xml文件要求
1、有一个根元素,包括所有子元素。
2、标签区分大小写,标签必须正确嵌套。
3、一个标签内的属性名不能重名,标签的值用'号或"括起来。
4、注释不可以嵌套,在标签内不可以用注释。
<!--
<customer><!----></customer>
-->
<customer<!---->></customer>
5、原样输出,里面可以放除<![[或]]>的所有的字符
<![CDATA[]]>
6、标签的文本值中不能直接给>,<,',",&,面是通过实体代替
> 是>
< 是<
" 是"
& 是&
' 是'
4、xml的命名空间,如果引入了两个dtd或两个schema,为了区分
来自不同定义文件但标签却相同的标签,前面加前缀
进行区分。
命名空间的定义:
在声明部分声明:
xmlns:前缀名="uri"
如:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
标签有两部分组成,一是前缀,另一是本地名
二、dtd
1、作用:定义xml文件的格式,规范xml文件格式。
2、具体定义:
1、元素
<!ELEMENT customers(customer+)>
<!ELEMENT customer(customerName,sex,age)>
<!ELEMENT customerName (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ELEMENT age (#PCDATA)>
元素套元素时:
+:1..n
*:0..n
?:0..1
|:多选一]
,:依次出现
没有:出现一次
元素是文本:
#(PCDATA)
2、属性
<!ATTRLIST 元素名 属性名 属性类型 属性修饰>
属性类型:
CDATA 文本
ID 不可重复,首位必须是字母的文本
属性修饰
#IMPLIED:可有可无
#REQUIRED:必须有
三、schema(xsd):也dtd的作用一样,也是定义xml文件格式的,但比dtd的功能更加强大
,更好的支持命名空间,数据的类型更加非富,类型可以自己定义。
1、核心标签
complexType:如果有子元素或属性必须通过complexType说明。
<complexType>
<sequence>必须出现,顺序出现
<element name="customerName" type="xs:string" minOccors="0" maxOccors="unbounded"/>
<element name="sex" type="xs:string" minOccors="0" maxOccors="unbounded"/>
<element name="age" type="xs:string" minOccors="0" maxOccors="unbounded"/>
</sequence>
</complexType>
<complexType>
<choice> 多选一
<element name="customerName" type="xs:string" minOccors="0" maxOccors="unbounded"/>
<element name="sex" type="xs:string" minOccors="0" maxOccors="unbounded"/>
<element name="age" type="xs:string" minOccors="0" maxOccors="unbounded"/>
</choice>
</complexType>
<customerName type="java.lang.String">张三</customerName>
ComplexType
SimpleContent
extension
attribute
SimpleType:只说明元素的文本或属性的值。
<simpleType>
<restriction base="xs:string">
<minInclude value="a"> //>=最小值
<maxInclude value="z"> //<=最大值
<minExclusive value="a"> //>最小值
<maxExclusive value="z"> //<最大值
<enumeration value="序列"/>//序列
</restriction>
</simpleType>
<customerName>aa</customerName>
<customer customerID="a001"></customer>
type:每一个元素有一个type属性,其指向具体的simpleType或
complexType说明元素的内容。
四、xsl
作用:将xml转化成html
注意事项:
必须有一个模板
标签:
<template match="/">:是xsl必须有的模板
<apply-templates select="路径"/>
--循环
<foreach>
--排序
<sort select="元素名" order=""/>
--判断
--if
<if test="元素=''">
</if>
<if test="元素 lt; ''">
</if>
<if test="@属性名=''">
</if>
--choose
<choose>
<when test=''></when>
<otherwise></otherwise>
</choose>
<choose>
<when test="students/student[(score <85 or score =85) and sex='女']"></when>
<otherwise></otherwise>
</choose>
--变量
<varial name="a1">
<value-of>count(students/student)</value-of>
</varial>
<varial name="a2">
<value-of>sum(students/student/score)</value-of>
</varial>
<varial name="a3">
<value-of>round(($a1 div $a2)*10) div 10</value-of>
</varial>
--取值
<value-of/>
--应用模块可以代循环
--数据的转化
--两个源(xml、xsl),一个目标(html)
trans.tranformer(new DOMSource(doc),new StreamResult("a.xml"));
五、dom解析
特点:将整个xml文件加载到内存中,形成一个对象树,每一个节点都是一个对象
通过每一个节点的方法及属性与外部交互。
优点及缺点:
优点:
可随意读,可写
缺点:
因为要将所有的内容加载内存中,耗内存,速度慢。
dom中的六大接口:
Document:代表xml文件文档
NodeList nl=doc.getElementsByTagName("customer");
doc.createElement("customer");//创建一个节点
doc.createTextNode("");//创建文本节点
doc.appendChild();//增中根元素
doc.documentElement;//得到根元素
Node:节点
Element:一个元素
NodeList nl=cod.getElementsByTagName("customer");
setAttribute("属性名","值");//设值
getAttribute("属性名");//取值
TextNode:文本节点
tn.getNodeValue();//文本值
NodeList:节点集合
nl.getLength();//得到长度
nl.item(0);//取一个元素
Attribute:属性
dom的解析过程:
//得到一个解析器工厂
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
//得到一个解析器
DocumentBuilder db=dbf.newDocumentBuilder();
//解析
Document doc=db.parse("c:\a.xml");
dom内容的写出
//得到一个传输工厂
TransformerFactory tff=TransformerFactory.newInstance();
//得到一传输器
Transformer former=tff.newTransformer();
//传输
former.transform(new DOMSource(doc),new ResultStream("c:\a.xml"));
五、sax解析
特点:边读边解析,只读、只进,j2ee相关的配置文件是通过sax解析的。
优:
快,所耗资源小
缺:
只读,只进
实现:
1、实现一个处理类,必须继承于DefaultHandler
public class MyHandler extends DefaultHandler
{
//文档开始时触发
public void startDocument();
//元素开始时触发
public void startElement();
//元素结束时触发
public void endElement();
//文档结束时触发
public void endDocument();
//碰到文本时触发
public void characters();
}
2、通过sax解析
SAXParserFactory spf=SAXParserFactory.newInstance();
SAXParser sp=spf.newSAXParser();
sp.parse("c:\a.xml",new MyHandler());
作业:
create table student
(
studentID int primary key,
studentName varchar2(20),
sex varchar2(20),
birthday date,
like varchar2(20)
)
studentID及like是属性,其余是子元素
编写dtd、schema、xml、通过xsl将xml的信息转化为一个表格的html
将xml信息解析写入到数据库、从数据库读取student信息
写入到xml文件中用两种方式。
2、通过sax解析customer.xml文件将内容写入到数据库中。
io
io流整体总结
用的是装饰模式,装饰模式有四个角色,分别是通用接口、本原、抽象装饰、
具体装饰,因为是将本原聚合到了装饰中,所以可以将本原或装饰通过构造子注入到
另一个装饰,多个装饰可以随意的组合,形成一个综合的功能对象。
io流分为输入流及输出流,输入流是文件到内存,输出流是内存到文件。
流分为低层流及高层流,在实例化高层流时必须通过构造子将低层流注入到高层
流中。输入流通用的方法是read(),read(char[]),read(byte[]),readline,输出流
的通用方法是write(int),write(byte[]),write[char[]],print("string")。
当读取一个文件时,对于以字节/字节数组,字符/字符数组读取的结束条件是!=-1,
对于以字符串读取的结束条件是!=null。对于有缓存的输出时,要想写入到文件
必须flush或close。
输入字节流的体系结构
InputStream
FileInputStream FilterInputStream
ObjectInputStream DataInputStream BufferedInputStream
实现代码:
--读一个字节
int temp=fis.read();
while(temp!=-1)
{
System.out.print(temp);
temp=fis.read();
}
--读一批字节
byte[] bytes=new byte[1000];
int result=fis.read(bytes);
while(result!=-1)
{
String temp=new String(bytes,0,result);
result=fis.read(bytes);
}
输出的字节流:
OutputStream
FileOutputStream FilterOutputStreame
ObjectOutputStream BufferedOutputStream DataOutputStream PrintStream
输出字节流代码:
int temp;
fis.write(temp);
byte temps[]=new byte[1000];
fos.write(temps);
输入的字符流
Reader
FileReader InputStreamReader(将字节流转化字符流)
BufferedReader(有缓存)
输入字符流的实现
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String temp=br.readLine();
while(temp!=null)
{
temp=br.readLine();
}
输出的字符流:
Writer
FileWriter OutputStreamWriter
BufferedWriter PrintWriter
输出字符流代码:
fw.write(int)
fw.write(char[])
fw.write("string");
PrintStream、BufferedWriter、PrintWriter
PrintStream:属于字节流,即可以打印字节也可以打印数组,
写入文件不用close或flush,e.printStackTrace()
System.out.println()都是它的实例。
BufferedWriter、PrintWriter:属于字符流,只可以打印字符或字符串
因为有缓存,要想写入文件必须close或flush
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -