参考: w3school
XML入门
引入
HTML, 超文本标记语言。
html语言语法是很松散的!
1)标签不区分大小写的!
2)标签可以不匹配的。
由w3c组织,针对html的语法缺陷,去设计了另一门,叫xml语言。
html语言的标签是固定的。
XML语言
XML | |
概念 | 可扩展标记语言 |
标记数量 | 是不固定的,可扩展的 |
作用 | 1)描述带关系的数据结构(作为软件的配置文件) properties配置文件: 键值对 name=eric password=123456 xml可以描述包含与被包含的关系。 配置使用场景: 1)框架(struts2 , hibernate,spring),xml作为框架的配 置文件 2)tomcat服务器软件配置文件(web.xml server.xml) 2)装载数据(作为小型的“数据库”)。 |
XML作用
作为软件配置文件
PCweb服务器:学生管理系统 - > 添加学生 -> name=张三,age=20 -> 提交到后台程序 -> 把数据存储到数据库中
两台通讯条件;
IP地址和端口
java代码: 根据ip和端口连接数据库服务器(ip改动会改变代码)
properties文件:
ip=211.34.21.43
port=20
xml文件:
<host-list>
<host id="main">
<ip> 211.34.21.43</ip>
<port>20</port>
</host>
<host id="backup">
<ip> 211.34.21.44</ip>
<port>20</port>
</host>
</host-list>
PC数据库服务器1:oracle数据库 211.34.21.43 20
PC数据库服务器2:oracle数据库 211.34.21.44 20
作为小型数据库
教师管理系统 教师信息: 姓名 工龄 邮箱地址
传输数据:
字符串: 张|三|20|zhangsan@qq.com|.......|.... (格式不是行业规范的,不通用)
xml格式:
<teacher-list>
<teacher>
<name></name>
<email></email>
<workage></workage>
....
</teacher>
<teacher>
<name></name>
<email></email>
<workage></workage>
....
</teacher>
<teacher-list> (xml是w3c组织的制定的标准)
json格式
获取字符串,截取字符串数据。
财务系统
发邮件给教师:
邮箱地址 姓名
方案1:财务系统中也存储了一套教师信息。数据维护成本比较高了!!!
方案2: 财务系统使用的教师数据从教师管理系统中发送过去的。
XML语法
标签
<student>学生</student>
注意:
1)分带标签体的标签,也有空标签。
2)标签是区分大小写
3)标签一定要配对
4)标签中间不能含有空格
5)不能使用数字开头
6)如果没有指定名称空间的话, 标签名中间不能含有冒号
7)在同一个xml文件中,有且仅有一个根标签
属性
<student id="1"></student>
注意:
1)一个属性分为属性名和属性值。属性名和值之间使用=号分割。
2)属性值一定要使用单引号或者双引号包含,不能省略,也不能单双混用!
3)一个标签内可以包含多个属性,但是不能出现同名的属性
注释
<!-- xml --->
文档声明
<?xml version="1.0" encoding="码表"?>
version: xml的版本号
encoding: 表示解析xml文件内容时使用的码表
xml文件的编码问题:
1)xml文件内容保存的编码(另存为-》选择编码保存)
2)解析xml文件内容的编码( <?xml version="1.0" encoding="utf-8"?> )
以上两个编码必须保存一致,才能避免中文乱码问题。
注意:
如果在ecplise开发工具上,编写xml文件,那么xml文件内容自动按照文档声明的encoding的编码保存,所以不会中文乱码问题.
转义字符
和html的转义字符.
CDATA块
把CDATA块中的内容全部原样输入
在编写XML文件时,有些内容可能不想让解析引擎解析执行,而是当作原始内容处理。
遇到此种情况,可以把这些内容放在CDATA区里,对于CDATA区域内的内容,XML解析程序不会处理,而是直接原封不动的输出。
语法:<![CDATA[ 内容 ]]>
<![CDATA[
<itcast>
<br/>
</itcast>
]]>
处理指令(不用了,过时了)
<?xml-stylesheet type="text/css" href="1.css"?>
XML解析
xml解析方式
1)DOM解析:
2)SAX解析
DOM解析的工具
Sun官方jaxp工具
jdom工具
dom4j工具: 三大框架读取xml文件的程序。(非官方的,第三方的)
dom for java
iphone4s iphone for steven
dom4j工具使用
1)到dom4j的官方下载 。dom4j-1.6.1.zip
2)导入dom4j的支持jar包、
dom4j-1.6.1.jar核心包
DOM4J
DOM在java平台上的应用
dom4j是一套开源的类库。
集成的 XPath(路径查询语言)支持、 XML Schema(约束模式文档)支持。
具体操作:
获取到dom4j的jar包以及帮助文档。
将jar包设置到classpath中,就可以使用dom4j中提供的对象,进行xml文档的解析了。
查看帮助文档了解对象的使用。
XML文档基本操作——Document
获取xml文档对象Document。
File xmlFile = new File(“test.xml”);
SAXReader reader = new SAXReader();
Document xmlDoc = reader.read(xmlFile);
XML文档基本操作——Element
获取根元素对象
Element root = xmlDoc.getRootElement();
获取根元素名称
String elementName = root.getName();
获取直接子元素对象
通过元素名称获取元素对象
Element element = root.element(“元素名称");
获取所有直接子元素对象集合
List elementList = root.elements();
获取元素对象中的文本
获取element元素的内部文本
String text = element.getText();
获取element子元素内部文本
String text = element.elementText(“子元素名称”);
XML文档基本操作——Attribute
获取元素属性对象
通过属性名获取元素属性对象
Attribute attribute = element.attribute(“属性名称");
通过索引获取属性对象
Attribute attribute = element.attribute(0);
获取所有属性对象集合
List attributeList = root.attributes();
获取属性值
通过属性对象
String value = attribute.getValue();
通过元素对象
String value = element.attributeValue(“属性名称”);
XML文档基本操作——创建
创建文档Document
Document document = DocumentHelper. createDocument();
创建元素
Element element = document.addElement(“元素名称");
创建属性
element. addAttribute(“属性名”,“属性值");
添加属性方法返回的是原元素对象。如同StringBuffer。
创建文本
element.addText(“文本");
XML文档基本操作——删除节点
remove(Element element)
remove(Attribute attribute)
remove(Text text)
……
remove(Node node)
Node接口的子类对象都可以移除
注意:remove是移除直接子节点时使用
parentElement.remove(childElement);
XML文档基本操作——建立xml文件
建立xml文件
FileWriter fw = new FileWriter(“students2.xml”);
XMLWriter writer = new XMLWriter(fw);
writer.write(document);
writer.close();
建立漂亮的xml文档,可以指定字符编码
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding(“GBK");
XMLWriter writer = new XMLWriter(fw,format);
DOM 的问题
DOM 构建整个文档驻留内存的树。如果文档很大,就会要求有极大的内存。
DOM 创建表示原始文档中每个东西的对象,包括元素、文本、属性和空格。如果您只需关注原始文档的一小部分,那么创建那些永远不被使用的对象是极其浪费的。
DOM 解析器必须在您的代码取得控制权之前读取整个文档。对于非常大的文档,这会引起显著的延迟。
总结:
xml解析
dom解析方法: dom4j的工具
查:
标签: element("name")
elements("name")
elements();
getName() 标签名称
getRootElement(): 根标签
属性: atrributeValue("name") 属性值
atrribute("name") 对象
atrributes() 属性对象列表
getName() : 属性名
getValue() 属性值
文本:
getText(); 当前标签的文本
elementText("name") 子标签的文本
增:
DocumentHelper.createDocument() 文档
addElement("name"); 标签
addAtribute("name","value" ) 属性
改:
setValue() 修改属性值
addAttribute(”同名“) 修改属性值
setText() 修改文本内容
删除:
detach() 标签、属性
getParent().remove(标签/属性)