xml :可扩展标记语言: 标签可以任意定义,不需要进行编译,浏览器就可以解析
xml与html的区别:
1.xml 标签是可以任意定义 但是 html 的是不可以的
2.xml是数据的存储(配置文件) html 主要是做页面的显示
3.html5 比较火的前端技术有有xml+html结合,html5是依赖于xml
xml数据传输与数据库数据传输的区别
xml适合数据量小的小型应用 可以用于任何平台、任何操作系统、任何软件平台,但缺点就是不适合数据量大的 还有就是没有安全性。
数据库就安全性高 适应范围广,但缺点就是有平台限制、价格昂贵。
xml 的一个基本的结构: 1.xml的声明 2. 文档的基础信息(标签节点 属性节点 文本节点)
1.只能存在一个跟节点
2.标签一般都是成双的 如果是单个必须是结束标签
3.标签严格区别大小写
4.严格遵循驼峰命名
5.要注意标签与标签之间的缩进与空格
<exam>
<student idcard="111" examid="222">
<name name="张三">张三</name>
<location location="沈阳">沈阳</location>
<grade grade="89">89</grade>
</student>
<student idcard="41414141" examid="321214124">
<name name="李四"/>
<location location="广东"/>
<grade grade="100"/>
</student>
</exam>
xml 中的一些特殊的符号:
< <
> >
& *amp;
' &aops;
" "
xml 解析的常见的方式
dom dom4j => 是把这个xml都会加载到内存里,然后对其进行解析(web) dom 4j 就是对dom的一个优化
sax ==>边加载,边解析(移动端)
dom 解析 ==> 1.第一步也就是需要把xml转换成一个dom树
具体的步骤 1.得到解析器工厂对象DocumentBuilderFactory
2.得到解析器对象
3.调用其方法把其转换成doc 对象 db.parse(file); 需要传递一个文件对象的参数
2.得到xml的信息: 1.根据getElementsByTagName()方法来获取到 所有的brand节点
2.遍历集合(NoteList) 获取集合的长度是getLength()
3.得到具体的节点
4.转换哼元素节点 获取元素中具体的值 getAttribute("name")
5. 获取下面的子节点:getChildNodes();
6.注意:判断其节点的类型 Node.ELEMENT_NODE
3.增加阶段的具体步骤:1.创建一个节点
2.设置其属性
3.添加父子关系
4.一层一层添加之后追加到根节点
4 保存到xml里 :1.得到其转换的工厂TransformerFactory
2.得到准换器Transformer
3.调用其方法 tf.transform() 需要传递两个参数 第一个是DOMSource(不要忘记把dom对象放入) 第二个参数是:StreamResult
5.删除 : 1.根据getElementsByTagName()方法来获取到 所有的brand节点
2.遍历集合(NoteList) 获取集合的长度是getLength()
3.通过父节点来删除自己
6.修改与删除是类似的(仿照)
private org.w3c.dom.Document doc;
//需要把xml转换成一个domd对象
public void getDocument(){
try {
//得到dom解析工厂
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
//得到解析器
DocumentBuilder db= null;
try {
db = dbf.newDocumentBuilder();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
//提供一个方法把xml转换成doc对象
File file=new File("123.xml");
doc=db.parse(file);
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//读取数据
public void show(){
//根据标签名来获取当前cos所有的节点
NodeList nodeCosList=doc.getElementsByTagName("cos");
for(int i=0;i<nodeCosList.getLength();i++){
//得到每一个节点
Node cos=nodeCosList.item(i);
//把节点对象转换成属性对象
Element elementCos= (Element) cos;
System.out.println(elementCos.getAttribute("name"));
//得到所有的Type,获取当前cos的子节点
NodeList nodeTypeList=cos.getChildNodes();
for(int j=0;j<nodeTypeList.getLength();j++){
//获得每一个Type节点
Node type=nodeTypeList.item(j);
//判断是否是元素节点
if(type.getNodeType()==Node.ELEMENT_NODE){
//转换成属性节点
Element elementType= (Element) type;
System.out.println(elementType.getAttribute("name"));
}
}
}
}
//增加一个节点
public void add(){
//创建cos节点
Element cosElement=doc.createElement("cos");
//给其设置属性
cosElement.setAttribute("id","帽子");
//创建type节点
Element typeElement=doc.createElement("type");
//设置其属性
typeElement.setAttribute("id","绿色");
//添加父子关系
cosElement.appendChild(typeElement);
//再给cos添加父子关系
doc.getElementsByTagName("clothesType").item(0).appendChild(cosElement);
}
//把doc对象写入到文件里
public void write(){
//转换器工厂
TransformerFactory tff=TransformerFactory.newInstance();
try {
//得到转换器
Transformer tf=tff.newTransformer();
DOMSource ds=new DOMSource(doc);
//第一个参数是写入的地址
StreamResult sr=new StreamResult(new OutputStreamWriter(new FileOutputStream("222.xml"),"utf-8"));
tf.transform(ds,sr);
} catch (TransformerException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
//删除节点的信息
public void delete() {
NodeList nodeCosList = doc.getElementsByTagName("cos");
for (int i = 0; i < nodeCosList.getLength(); i++) {
//得到具体额节点
Node cos = nodeCosList.item(i);
//转换成属性节点
Element cosElement = (Element) cos;
if (cosElement.getAttribute("name").equals("绿色")) {
//通过父节点来删除自己
cosElement.getParentNode().removeChild(cosElement);
}
}
}
//修改
public void update(){
NodeList nodeList=doc.getElementsByTagName("cos");
for(int i=0;i<nodeList.getLength();i++){
Node cos=nodeList.item(i);
Element cosElement= (Element) cos;
cosElement.setAttribute("id", String.valueOf((i+1)));
}
}
dom4j 解析xml 其实就是对dom的封装 简化了代码 需要导入jar包
dom4j 的核心的对象 : SAXReader sr.read(file); 把一个 文件转化成一个dom对象(是在内存里)
XMLWriter .write(doc) 把dom 对象写入在文件了
OutputFormat 格式 工厂类 主要是写入的编码格式进行设置
常规的一些方法:
getRootElement(); 获取到根节点的方法
elementIterator() 把多个集合转换成迭代器
elementType.attributeValue(“name”) 根据节点来获取到具体的值
addElement(“Brand”); 创建一个节点的对象
elBrand.getParent().remove(elBrand); 通过父节点来删除子节点
private Document doc;
//写一个方法把xml转换成dom对象
public void getDom(){
SAXReader sr=new SAXReader();
File file=new File("333.xml");
try {
doc=sr.read(file);
} catch (DocumentException e) {
e.printStackTrace();
}
}
//得到xml里的名字和品牌
public void show(){
//获得根节点的元素
Element element=doc.getRootElement();
//进行遍历
//elementIterator() 获得根节点下的所有子节点
for(Iterator iterCos=element.elementIterator();iterCos.hasNext();){
Element elementCos= (Element) iterCos.next();
System.out.println(elementCos.attributeValue("name"));
for(Iterator iterType=elementCos.elementIterator();iterType.hasNext();){
Element elementType= (Element) iterType.next();
System.out.println(elementType.attributeValue("name"));
}
}
}
//增加一个节点
//这种方法已存在父子关系,不需要添加父子关系
public void add(){
//获取到根元素
Element element=doc.getRootElement();
//增加cos节点
Element elementCos=element.addElement("cos");
//设置其属性
elementCos.addAttribute("name","手套");
//增加type节点
Element elementType=elementCos.addElement("Type");
//设置其属性
elementType.addAttribute("name","红色");
}
//写入到文件
public void write(String path){
//设置写入数据的编码格式
OutputFormat outputFormat=new OutputFormat();
outputFormat.setEncoding("UTF-8");
XMLWriter writer= null;
try {
writer = new XMLWriter(new FileOutputStream(path),outputFormat);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
writer.write(doc);
} catch (IOException e) {
e.printStackTrace();
}
}
//删除一个节点
public void delete(){
Element element=doc.getRootElement();
for(Iterator iterator=element.elementIterator();iterator.hasNext();){
Element elementCos= (Element) iterator.next();
for(Iterator iteraCos=elementCos.elementIterator();iteraCos.hasNext();){
Element elementType= (Element) iteraCos.next();
if(elementType.attributeValue("name").equals("红色")){
elementType.getParent().remove(elementType);
}
}
}
}
http协议 : 超文本协议 一次性连接 无状态 连接 主要是对文本进行传输(也可以对文件进行传输 需要在请求头里设置传输的格式)
tcp 慢 稳定 不会丢失数据 ==> 三次握手
udp 快 会丢失数据(发包裹) ==> socket 协议(tomcat就是基于socket 进行编程的)
http 是目前最通用的网络协议
http 协议就是网络传输的一种规范 : 无非就是客户端发送请求 服务器做出相应
http 协议的版本 分为
1.0 每一次连接请求都需要去创建一个连接, 而且每次只能请求一个数据
1.1 每次都需要 去创建一个连接 ,每次可以请求多个 多个数据
http 协议: 请求的协议 (也就是客户端传输发到服务器的一个规范或者约束)
响应的协议(也就是服务器给客户端的响应的约束或者规范)
就是以二进制进行传输 大部分都使用http1.1 的版本 ,1.1 版本效率更高
请求的协议 分为 请求行 请求头 请求内容体
get :传递的参数在放在请求头上 不安全 get 与一般用于文件的下载 get提交数据是有长度限制
post 传递到参数是放下内容体中 安全性高 post 提交数据 post 是没有长度限制的
响应的协议: 响应行 响应头 响应体
响应行 :http 1.0 200 ok
第一个是表示连接的版本
第二个是表示连接的状态
ok 表示成功
响应的状态码(一小部分):1. 200 表示成功
2.404 表示 页面找不到
3.302 表示重定向
4. 500 表示代码有错