XML:可扩展的标记语言
- 用来保存数据
- 可以用来做配置文件
- 数据传输载体
<?xml version"1.0" encoding="gbk" standalone="yes"?>
- version:解析这个xml的时候,使用什么版本的解析器解析
- encoding:解析xml中的文字的时候,使用什么编码来编译
- standalone:no 该文档会依赖关联其他文档;yes 这是一个独立的文档
几个非法字符:< < > > & & ' 省略号 &quto; 引号
<![CDATA][不解析区]>
XML解析方式:有很多种,常用DOM、SAX
针对解析方式的API (jaxp jdom dom4j)
入门案例:
- eclipse新建java项目
- 在src目录下新建文件夹xml,再新建.xml文件
- 导入jar包,在项目目录下新建文件夹lib,导入dom4j-1.6.1.jar
- 右键dom4j-1.6.1.jar,Build Path-->Add to Build Path
- 编写xml文件代码如下
-
<?xml version="1.0" encoding="UTF-8"?> <stus>? <stu> <name>小明</name> <age>18</age> <adress>广州</adress> </stu> <stu> <name>小张</name> <age>19</age> <adress>深圳</adress> </stu> </stus>
在src目录下新建包,新建class,代码如下
-
package test; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class MainTest { public static void main(String[] args) { try { //1.创建SAX读取对象 SAXReader reader=new SAXReader(); //2.指定解析的xml源 Document document=reader.read("src/xml/stus.xml"); //3.得到元素 //得到根元素 Element rootElement=document.getRootElement(); System.out.println(rootElement.getName()); //获取根元素下的子元素 System.out.println(rootElement.element("stu").element("age").getText()); //获取根元素下面的所有子元素.stu元素 List<Element> elements=rootElement.elements(); System.out.println(elements.size()); for (Element element : elements) { String name=element.element("name").getText(); String age=element.element("age").getText(); String adress=element.element("adress").getText(); System.out.println("name="+name+" age="+age+" adress="+adress); } } catch (DocumentException e) { e.printStackTrace(); } } }
- Xpath使用
package test;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class XpathTest {
public static void main(String[] args) {
try {
//1.创建SAX读取对象
SAXReader reader=new SAXReader();
//2.指定解析的xml源
Document document=reader.read("src/xml/stus.xml");
//3.得到元素
//得到根元素
Element rootElement=document.getRootElement();
//使用Xpath 添加jaxen-1.1-beta-6.jar 获取第一个
Element nameElement=(Element) rootElement.selectSingleNode("//name");
System.out.println(nameElement.getText());
System.out.println("--------------");
//获取文档里面所有name元素
List<Element> list=rootElement.selectNodes("//name");
for (Element element : list) {
System.out.println(element.getText());
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
XML约束
- DTD:早期出现 可读性差
- Schema:其实就是一个xml,使用xml的语法规则,xml解析器解析起来比较方便
一个xml如果想指定它的约束规则,可以引用多个schema约束,DTD约束只能一个;
C/S(client/server) 例如:QQ、微信
- 优点:有一部分代码写在客户端,用户体验比较好
- 缺点:服务器更新,客户端也要随着更新。占用资源大
B/S(browser/server) 例如:网页游戏
- 优点:客户端只要有浏览器就可以了。占用资源小,不用跟新
- 缺点:用户体验不佳。