XML
XML:
可扩展的标签语言
标签自定义
作用:存储数据.(作为配置文件使用)
书写规范:
1.区分大小写
2.应该有一个根标签
3.标签必须关闭
4.属性必须用引号引起来
<xx att="value"/>
5.标签体中的空格或者换行或者制表符等内容都是作为数据内容存在的
6.特殊字符必须转义
< > &
满足上面规范的文件我们称之为一个格式良好的xml文件.可以通过浏览器浏览
后缀名:.xml
组成部分:
1.声名:
作用:告诉别人我是xml文件
格式:<?xml ... ?>
例:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
要求:
1.必须在xml文件第一行
2.必须顶格写
2.元素(标签):
格式:
<xx></xx>
<xx/>
要求:
1.必须关闭
2.标签名不能 xml Xml XML 等等开头
3.标签名中不能出现" "或者" : "等特殊字符
3.属性:
格式:
<xx 属性名="属性值">
要求:
属性必须用引号引起来
4.注释:
和html一样
<!--注释-->
5.CDATA:
xml文件的特殊字符必须转义
通过cdataky保证数据原样输出
格式:
<![CDATA{
原样输出
}]>
xml解析:
解析方式:
1.sax 特点:逐行解析,只能查询
2.dom 特点:一次性将文档加载到内容中,形成一个dom树,可以对dom树curd操作;
解析技术:
1.JAXP:sun公司提供支持DOM和SAX开发包
2.JDom:dom4j兄弟
3.jsoup:一种处理HTML特定解析开发包
4.dom4j:比较常用的解析开发包,hibernate底层采用
dom4j技术进行查询操作:
使用步骤:
1.导入jar包
2.创建一个核心对象 SAXReader
new SAXReader();
3.将xml文档加载到内存中形成一棵树
Document doc = reader.read(文件);
4.获取根节点
Document doc = doc.getRootElement();
5.通过根节点就可以获取其他节点(文本节点,属性节点,元素节点)
获取所有子元素
List<Element> list = root.elements();
获取元素的指定属性内容
String value = root.attributValue("属性名");
获取子标签标签体,遍历list,获取每一个子元素
String text = ele.elementText("子标签名称")
import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; import java.util.List; public class Dom4jDemo { public static void main(String[] args) throws DocumentException { //创建核心对象 SAXReader reader = new SAXReader(); //获取dom树 Document doc = reader.read("E:\\workspaceIDE\\day08\\web\\web.xml"); //获取根节点 Element root = doc.getRootElement(); //获取其他节点 List<Element> list = root.elements(); //遍历集合 for (Element ele : list){ //获取servlet-name的标签体 //String text = ele.elementText("servlet-name"); //System.out.println(text); //获取url-pattern标签体 System.out.println(ele.elementText("url-pattern")); } //获取root的version属性 System.out.println(root.attributeValue("version")); } }
xpath解析技术:
依赖于dom4j
使用步骤:
1.导入jar包(dom4j和jaxen-1.1-beta.jar)
2.加载到xml文件到内存中
3.使用api
selectNode("表达式")
selectSingleNode("表达式")
表达式写法:
/ 从根节点选取
// 从匹配选择的当前节点选择文档中的节点,而不考虑他们的位置
例:一个标签下有一个id属性且有值 id = 2
//元素名[@属性名='属性值']
//xxx[@id='2']
import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; import java.util.List; public class XpathDemo { public static void main(String[] args) throws DocumentException { //获取dom树 Document doc = new SAXReader().read("E:\\workspaceIDE\\day08\\web\\web.xml"); //获取一群节点 List<Element> list = doc.selectNodes("/web-app/servlet/servlet-name"); Element ele = list.get(0); //System.out.println(ele); Element ele1 = (Element) doc.selectSingleNode("//servlet/servlet-name"); System.out.println(ele1.getText()); } }
xml约束:
作用:规定xml中可以出现哪些元素及哪些属性,以及他们的出现顺序
注意:一个xml文档中只能添加一个DTD约束
约束分类:
DTD约束:struts hiebernate等
SCHEMA约束:tomcat spring等
DTD约束:和xml的关联
方式1:内部关联
格式:<!DOCTYPE 根元素名 [dtd语法]>
方式2:外部关联-系统关联
格式:<!DOCTYPE 根元素名 SYSTEM "约束文件的位置">
例:<!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">
方式3:外部关联-公共关联
格式:<!DOCTYPE 根元素名 PUBLIC "约束文件名称" "约束文件位置">
DTD语法:
1.元素:<!Element 元素名称 书记类型 | 包含内容>
数据类型:
#PCDATA:普通文本 使用时一般用() 引起来
包含内容:
该元素下可以出现哪些元素 用() 引起来
2.符号:
* 出现任意次
? 出现一次或者0次
+ 出现至少一次
| 或者
() 分组
, 顺序
3.属性:
格式:
<!ATTLIST 元素名 属性名 属性类型 属性是否必须出现>
属性类型:
ID:唯一
CDATA:普通文本
属性是否必须出现:
REQUIRED:必须出现
IMPLIED:可以不出现
4.示例:
SCHEMA约束:
一个xml文档中可以添加多个schema约束
xml和schema的关联
1.格式:<根标签 xmlns = "..." ...>
2.名称空间xmlns:
关联约束文件
规定元素是来源于哪个约束文件
例:
一个约束文件中规定 table(表格) 表格有属性 row 和 col
还有一个约束文件规定 table(桌子) 桌子有属性 width和height
在同一个xml文件中,若导入两个约束文件则xml无法识别。
所以为了避免这种情况的发生,可以给其中一个起别名
使用时,若是没有加别名就代表是来自于没有别名的约束文件
如 table(表格) xmlns:a="..."
在xml中使用 a:table 代表表格
使用table代表桌子
注意:一个xml文件中只能有一个不起别名
3.示例:
注意:schema约束本身也是xml文件