xml (extensible markup language)
1.xml 是可扩展标记语言
2.xml是一种标记语言,类似于html
3.xml的设计宗旨是传输数据,而非显示数据
4.xml没有被预定义
5.使用约束的xml文档设计具有自我描述性
6.xml是w3c的推荐标准
xml格式
1.描述:<?xml version="1.0" encoding="gbk" ?>
2.根元素
3.子元素
xml元素命名
1.区分大小写
2.字母开头,不能以数字开头
3.命名空间不能包含空格
注释
格式:
注意:不能嵌套
CDATA区 - 解析器不解析此内容
格式: <![CDATA[ 内容 ]]>
转义字符
& : &
< : <
> : >
" : "
' : '
空格 :
引入css
格式: <?xml-stylesheet type="text/css" href="xx.css" ?>
xml约束
1.DTD
2.Schema
DTD约束
1.关联DTD - 只能引入一种
内部关联:格式:<!DOCTYPE 根元素 [ 约束语法 ]>
外部关联:格式:<!DOCTYPE 根元素 SYSTEM "dtd文件">
公共关联:格式:<!DOCTYPE 根元素 PUBLIC "文件名称" "文件路径">
2.语法-元素
格式:<!ELEMENT 元素名称 (元素内容声明)>
? : 表示该元素可以出现,但是只能出现一次 <!ELEMENT books (book?)>
* : 表示该元素允许出现任意多次,也可以零次 <!ELEMENT books (book*)>
+ : 表示该元素最少出现一次,可以出现多次 <!ELEMENT books (book+)>
() : 用来给元素分组 <!ELEMENT book (name,price)>
| : 表示列出的元素中选择一个 <!ELEMENT book (name|price)>
, : 表示元素必须按照指定的顺序出现 <!ELEMENT book (name,price)>
EMPTY : 如果一个元素的CONTENT 被声明为EMPTY,那么该元素不能包含任何子元素和文本,仅可以使用属性 <!ELEMENT name EMPTY>
ANY : 表示该元素中可以包含任何在DTD中定义的元素内容 <!ELEMENT name ANY>
#PCDATA : 表示该元素可以包含任何字符数据,但是不能在其中包含任何子元素 <!ELEMENT name #PCDATA>
3.语法-属性
格式:<!ATTLIST 元素名称 [属性名称 属性类型 约束].. >
<!ATTLIST book
id ID #REQUIRED
city (北京|上海|广州) "上海" //这个在浏览器没有展示???
company CDATA #FIXED "sun" //这个在浏览器没有展示???
>
#REQUIRED 必须存在的属性
#IMPLIED 可以为空
#FIXED "value" 固定值
Defaultvalue 默认值
设置固定值,方便xml中被引用:设置:<!ENTITY bookVal "java Core"> xm中引用:<title>&bookVal;</title> 这样还可以直接引用一个xml中所有内容
设置固定值,方便dtd中被使用:设置: <!ENTITY % bookInfo "price,name"> dtd中引用:<ELEMENT book (title,%bookInfo;)>
属性类型
ID 唯一标识
CDATA 字符数据
IDREF 引用已有的唯一标识
Schema约束
1.本身就是一个xml文件,扩展名xsd扩展名xsd (xml schema document)
2.必须有一个根节点,叫Schema
3.是一套预定义的xml元素和属性创建的
4.在eclipse中新建一个xml schema文件即可。
5.新建后添加别名xs: 这个出处 <xs:schema xmlns:xs="">
关联schema - 重点
xmlns : 引用命名空间(xsd的targetNamespace)
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
官方规定 - 用于实例化
xsi:schemaLocation="http://www.example.org/schematest schematest.xsd"
两个参数
1.引用schema名称
2.schema文件位置
schema语法
complexType 复合类型(复杂类型)
sequence 顺序出现 minOccurs最少几个,maxOccurs最大几个
choice 选择出现
all 没有顺序出现,必须全部都在
simpleContent 简单类型
extension 扩展
restriction 约束(限制条件)
四种复杂类型
1.空元素
2.包含其它元素的元素
3.仅包含文本的元素
4.包含元素和文本的元素
案例:
1.仅含有属性的空元素 <attribute name="src"></attribute>
2.仅含有属性的空元素,属性必须写 <attribute name="src" use="required"></attribute>
optional 可选
required 必须
prohibited 禁用
2.仅含有属性的空元素,属性必须写,并且规定值的类型<attribute name="src" use="required" type="integer"></attribute>
3.必须含有属性的非空元素
schema自定义类型
<xs:simpleType name="string">
<xs:restriction base="xs:string">
<xs:pattern value="\d{6}-\d{8}-\d{4}"></xs:pattern>
</xs:restriction>
</xs:simpleType>
需要用自己的命名空间引用:<xs:element name="books" type="tns:string"></xs:element>
tns是自己的命名空间
注意:
xmlns : 引用命名空间
xmlns:tns : 是对命名空间起一个叫 tns 的别名
xmlns:xsi :值是固定写法 http://www.w3.org/2001/XMLSchema-instance,每一个xml都要有
xsi:schemaLocation : 是命名空间的位置
targetNamespace : 命名空间
xml解析
1.DOM解析 ,全部加载到内存。
获得工厂实例 DocumentBuilderFactory
通过工厂获得解析器实例 DocumentBuilder
通过解析器 Document
解析xml 根元素getDocumentElement,子元素getElementsByTagName,属性getAttributes
2.SAX解析
获得工厂实例 SAXParserFactory
创建解析器 SAXParser
创建解析Handler DefaultHandler(startDocument,endDocument,startElement,endElement,characters)
解析xml 注意:文本值的赋值需要全局变量注意清空全局变量
从Handler中获得解析的集合 开放get方法
3.Dom4j解析
获得解析器 SAXReader
解析获得Document对象 Document
获得根元素 getRootElement()
获得所有子元素 elements()
遍历所有子元素 多层for循环遍历
4.Dom4j-xpath查询
5.Dom4j-curd