xml笔记
1.1 引入:
HTML:负责网页结构
CSS:负责网页样式(美观)
Javascript:负责在路兰区端与用户进行交互
负责静态的网页制作的语言
HTML特点:
1)有标签组成。<title><p><hr/><br/>
2)语法结构松散的<p></p> <p> <p>
大小写不区分
结束标签和开始标签不一定匹配
自定义标签可以把它们叫做xml标签
2 XML语法:
xml文件以xml后缀名结尾
xml文件需要使用xml解析器去解析。浏览器内置了xml解析器。
2.1 标签
语法:<student></student> 开始标签 标签体内容 结束标签
1)<student/>或<student></student>空标签。没有标签体内容
2)xml标签名称区分大小写
3)xml标签一定要正确配对
4)xml标签名中间不能使用空格
5)xml标签名不能以数字开头
6)注意:在一个xml文档中,有且仅有一个根标签
2.2属性:
语法:<Student neme="eric">student</Student>
注意: 1)属性值必须以引号包含,不能省略,也不能单双引号混用
2)一个标签内可以有多个属性,但不能出现重复的属性名
2.3注释:
语言:<!-- xml注释 -->
2.4文档声明
语法:<?xml version="1.0" encoding="utf-8"?>
version:xml版本号
encoding: 解析xml文件时查询的码表(解码过程时查询的码表)
注意:
1)如果在ecplise工具中开发xml文件,保存xml文件时自动按照文档声明的encoding来保存文件
2)如果用记事本工具修改xml文件,注意保存xml文件按照文档声明的encoding的码表来保存
2.5转义字符:
在xml中内置了一些特殊字符,这些字符不能直接被浏览器原样输出。如果希望把这些特殊字符按照原样输出到浏览器,对这些特殊字符进行转义。转义后的字符就叫转义字节。
特殊字符 转义字符
< &It;
> >
" "
& &
空格 &nxbp;
2.6 CDATA块
作用:可以让一些需要进行包含特殊字符的内容同意进行原样输出。
2.7 处理指令
作用:告诉xml解析如果解析xml文档
案例:<?xml-stylesheet type="tect/css" href="1.css"?>告诉xml计息该xml文档引用了哪个css样式
需要提前xml内容可以是用xml-stylesheet指令指令
3XML解析
3.1引入
xml文件除了给开发者看,更多的情况使用程序读取xml文件的内容。这就叫做xml解析
3.2XML解析方式(原理不同)
DOM解析
SAX解析
3.3XML解析工具
DOM解析原理:
1)Sax解析工具(oracle-sun公司官方)
3.4什么是DOM解析
DOM加息原理:xml解析器一次性把整个xml文档加载进内存,然后在内存中构建一颗Document的对象树,通过Document对象,得到树上的节点对象,通过节点对象访问(操作)到xml文档的内容。
3.5Dom4j工具
非官方,不在jdk中
使用步骤:
1)导入domaj的和辛堡。dom4j-1.6.1.jar
2)编写Dom4j读取xml文件代码
public static void main(String[] args){
try{
//1.创建一个xml解析器对象
SAXReader reader = new SAXReader();
//2.读取xml文档,返回Document对象
Document doc = reader.read(new File("文档路经"));
sop()doc;
catch(DocumentException e){
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
3.6Domj4读取xml文件
节点:
Iterator Element.nodeIterator();//获取当前标签节点下的u偶有子节点
标签:
Element Document.getRootElement();//获取xml文档的跟标签
Element Element.element("标签名")//指定名称的第一个子标签
Iterator<Element>Element.elementIterator("标签名");//指定名称的所有子标签
List<Element> Element.elements();获取所有子标签
属性:
String Element.attributeValue("属性名");//获取指定名称的属性值
Attibute Element.attribute("属性名");//获取指定名称的属性对象
Attibute.getName()//获取属性名称
Attibute。getValue();//获取属性值
List<Attibute> Element.attributes();//获取所有属性对象
Iterator.elementText("标签名")//获取当前标签的指定名称的子标签的文本内容
//1.读取xml文档,返回Document对象
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("./src/contact.xml"));
2.获取跟标签
Element rootElem = doc.getRootElement();
//3.得到标签名称
String name = rootElem.getName();
4.得到当前标签下指定名称的第一个子标签
Element contactElem = rootElem.element("contact");
5.得到当前标签下的所有指定名称的子标签
Iterator<Element> it = rootElem.elementIterator("contact");
while(it.hasNext()){
Element elem = it.next();
System.out.println(elem.getName());
//6.得到当前标签下的所有子标签
List<Element> list = rootElem.elements();
//遍历List集合
//方法:嵌套for 增强for 迭代器
//嵌套for
for(int i = 0; i<list.size(); i++){
Element e = list.get(i);
System.out.println(e.getName());
}
//增强for
for(Element e : list){
System.out.println(e.getName());
}
List<contact> list = new ArrayList<contact>();
//读取xml封装对象
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("./src/contact.xml"));
//读取跟标签
Iterator<Element> it = doc.getRootElement().elementIterator();
while(it.hasNext()){
Element elem = it.next();
//创建contact对象
contact contact = new contact();
contact.setId(elem.attributeValue("id"));
contact.setName(elem.elementText("name"));
contact.setAge(elem.elementText("age"));
contact.setPhone(elem.elementText("phone"));
contact.setEmail(elem.elementText("email"));
contact.setQq(elem.elementText("qq"));
list.add(contact);
}
for(contact contact : list){
System.out.println(contact);
}
contact contact = new contact();
}
Dom4j修改xml文档
2.1 写出内容到xml文档
XMLWriter writer = new XMLWriter(OutputStream, OutputForamt)
wirter.write(Document);
增加:
DocumentHelper.createDocument() 增加文档
addElement("名称") 增加标签
addAttribute("名称",“值”) 增加属性
修改:
Attribute.setValue("值") 修改属性值
Element.addAtribute("同名的属性名","值") 修改同名的属性值
Element.setText("内容") 修改文本内容
删除
Element.detach(); 删除标签
Attribute.detach(); 删除属性
4.2 SAX解析工具
SAX解析工具- Sun公司提供的。内置在jdk中。org.xml.sax.*
核心的API:
SAXParser类: 用于读取和解析xml文件对象
parse(File f, DefaultHandler dh)方法: 解析xml文件
参数一: File:表示 读取的xml文件。
参数二: DefaultHandler: SAX事件处理程序。使用DefaultHandler的子类
例如:{
1.创建SAXParser对象
SAXParser parser=SAXParserFactory.newInstance().newSAXParser();
2.调用parse方法
parser.parse(new File("./src/contact.xml"), new MyDefaultHandler());
} [一个类继承class 类名(extends DefaultHandler) 在调用是创建传进去
DefaultHandler类的API:
void startDocument() : 在读到文档开始时调用
void endDocument() :在读到文档结束时调用
void startElement(String uri, String localName, String qName, Attributes attributes) :读到开始标签时调用
void endElement(String uri, String localName, String qName) :读到结束标签时调用
void characters(char[] ch, int start, int length) : 读到文本内容时调用
============DOM解析 vs SAX解析===========
|
DOM解析 |
SAX解析 |
|
原理: 一次性加载xml文档,不适合大容量的文件读取 |
原理: 加载一点,读取一点,处理一点。适合大容量文件的读取 |
|
DOM解析可以任意进行增删改成 |
SAX解析只能读取 |
|
DOM解析任意读取任何位置的数据,甚至往回读 |
SAX解析只能从上往下,按顺序读取,不能往回读 |
|
DOM解析面向对象的编程方法(Node,Element,Attribute),Java开发者编码比较简单。 |
SAX解析基于事件的编程方法。java开发编码相对复杂。 |
总结:
1)Dom4j修改xml文档
new XMLWrier();
......
2)xPath技术: 快速查询xml节点
selectNodes()
selectSinglNode();
xpath表达式语言
3) SAX解析
SAXParser parse
parser()
DefaultHandler类:
startElement();
characters();
endElement();

浙公网安备 33010602011771号