1.xml
1.1xml 概念
可扩展的标签语言,标签自定义,作用:存储数据.(基本用于配置文件)
xml 常作为配置文件,里面存放了一些全限类名。通过解析 xml 和反射可以把这些类和类的方法加载。这便是学习本节内容的核心。当然初次之外还可以加载一些属性的值,用作参数传递。
1.2 书写规范
1.区分大小写
2.应该有一个根标签
3.标签必须关闭
4.属性必须用引号引起来,且是 key="value"形式
5.标签体中的空格或者换行或者制表符等内容都是作为数据内容存在的
aa
aa 这 2 种写法不一样
6.特殊字符必须转义
< > &
满足上面规范的文件我们称之为是一个格式良好的 xml 文件.可以通过浏览器浏览。后缀名: *.xml
1.3xml 组成部分:
1.3.1 声明
作用:告诉别人我是一个 xml 文件
格式:
例如: 版本目前暂时 1.0
要求: 必须在 xml 文件的第一行,必须顶格写
1.3.2 元素(标签)
格式:
要求:1.必须关闭
2.标签名不能 xml Xml XML 等等开头
3.标签名中不能出现" "或者":"等特殊字符.
1.3.3 属性
格式: <xx 属性名="属性值"/>
要求: 属性必须用引号引起来
1.3.4 注释:
和 html 一样
1.3.5 CDATA:
xml 文件的特殊字符必须转义,通过 cdataky 保证数据原样输出,无需再使用转义。
格式:
原样输出的内容
1.4xml 解析:
1.4.1 解析方式
1.sax:特点:逐行解析,只能查询.
2.dom:特点:一次性将文档加载到内容中,形成一个 dom 树.可以对 dom 树 curd 操作
1.4.2 解析技术
JAXP:sun 公司提供支持 DOM 和 SAX 开发包
JDom:dom4j 兄弟
jsoup:一种处理 HTML 特定解析开发包
★dom4j:比较常用的解析开发包,hibernate 底层采用。
1.4.3dom4j
解析原理:Xml 解析器一次性把整个 xml 文档加载进内存,然后在内存中构建一颗 Document 的对象树,通过 Document 对象,得到树上的节点对象,通过节点对象访问(操作)到 xml 文档的内容。
使用步骤:
1.导入 jar 包
2.创建一个核心对象 SAXReader
new SAXReader();
3.将 xml 文档加载到内存中形成一棵树
Document doc=reader.read(文件) 文件路径\转义\
4.获取根节点 导包 dom4j 的包
Element root=doc.getRootElement();
5.通过根节点就可以获取其他节点(文本节点,属性节点,元素节点)
获取所有的子元素
List list=root.elements()
获取元素的指定属性内容
String value=root.attributeValue("属性名");
获取子标签标签体:遍历 list 获取到每一个子元素
String text=ele.elementText("子标签名称")
1.4.4xpath 解析技术
指哪打哪的 dom4j 的扩展版,依赖于 dom4j。
使用步骤:
1.导入 jar 包(dom4j 和 jaxen-1.1-beta-6.jar)
2.加载 xml 文件到内存中
3.使用 api
selectNode("表达式");
selectSingleNode("表达式");
表达式的写法:
/ 从根节点选取
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
例如一个标签下有一个 id 属性且有值 id=2;
//元素名[@ 属性名='属性值']
//元素名[@id='2']
1.5 反射:
反射步骤:
1.获取对应的 class 对象
方式 1:★Class clazz=Class.forName("全限定名");
方式 2:Class clazz=类名.class;
方式 3:Class clazz==对象.getClass();
2.通过 class 对象创建一个实例对象(相当于 new 类())
Object clazz.newInstance();
3.通过 class 对象获取一个方法(public 修饰的)
Method method=clazz.getMethod("方法名",Class .... paramType); paramType 为参数的类型
4.让方法执行: method.invoke(Object 实例对象,Object ... 参数);
Object 实例对象:以前调用方法的对象,现在 clazz.newInstance()的对象。
Object ... 参数:该方法运行时需要的参数
1.6xml 约束:
作用:规定 xml 中可以出现那些元素及那些属性,以及他们出现的顺序.
约束的分类:
DTD 约束:struts hiebernate 等等
SCHEMA 约束:tomcat spring 等等
1.6.1DTD 约束:
1.6.1.1 和 xml 的关联 (一般都会提供好,复制过来即可,有时候连复制都不需要.)
方式 1:内部关联 格式:
方式 2:外部关联-系统关联 格式:
例如:
方式 3:外部关联-公共关联 格式:
1.6.1.2Dtd 语法
元素:<!Element 元素名称 数据类型 | 包含内容 >
数据类型:#PCDATA:普通文本 使用的时候一般用()引起来
包含内容:该元素下可以出现那些元素 用()引起来
符号:*出现任意次 ?出现 1 次或者 0 次 + 出现至少 1 次 | 或者 ()分组 , 顺序
属性:格式:
属性类型: ID:唯一 CDATA:普通文本
属性是否必须出现 REQUIRED:必须出现 IMPLIED:可以不出现
一个 xml 文档中只能添加一个 DTD 约束
xml 的学习目标:编写一个简单的 xml 文件可以根据约束文件写出相应 xml 文件.按 f2 或者 alt+/提示写出内容即可
1.6.2SCHEMA 约束
一个 xml 文档中可以添加多个 schema 约束
xml 和 schema 的关联
格式: < 根标签 xmlns="..." ...>
< 根标签 xmlns:别名="..." ...>
ns(nameSpace)名称空间:关联约束文件、规定元素是来源于那个约束文件的。
注意:schema 约束本身也是 xml 文件.
例如:
一个约束文件中规定 table(表格) 表格有属性 row 和 col
还有一个约束文件规定 table(桌子) 桌子有属性 width 和 height
在同一个 xml 中万一我把两个约束文件都导入了,在 xml 中我写一个 table,这个 table 有什么属性????
我们为了避免这种情况的发生,可以给其中的一个约束起个别名
使用的时候若是没有加别名那就代表是来自于没有别名的约束文件
例如 table(表格) 给他起个别名 xmlns:a="..."
在案例中使用 a:table 代表的是表格
若在案例中直接使用 table 代表的是桌子
在一个 xml 文件中只能有一个不起别名;
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于