一个xml文档有且仅有一个根标签;
文档声明
<?xml version="" encoding="utf-8"?>]
转义字符
特殊字符 转义字符
< <
> >
" "
& &
空格 &nsbp;
CDATA块
<![CDATA[
内容
]]>
--------------------------------------------------------------------------
约束:
DTD:
内部导入dtd:
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
外部导入dtd:
<!DOCTYPE note SYSTEM "note.dtd">
<!DOCTYPE 根元素 PUBLIC "http://gz.itcast.cn/itcast.dtd">
语法
约束标签
<!ELEMENT 元素名称 类别> 或 <!ELEMENT 元素名称 (元素内容)>
类别:
空标签: EMPTY。 表示元素一定是空元素。
普通字符串: (#PCDATA)。表示元素的内容一定是普通字符串(不能含有子标签)。
任何内容: ANY。表示元素的内容可以是任意内容(包括子标签)
(元素内容)
顺序问题:
<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>: 按顺序出现子标签
次数问题:
标签 : 必须且只出现1次。
标签+ : 至少出现1次
标签* : 0或n次。
标签? : 0 或1次。
约束属性
<!ATTLIST 元素名称 属性名称 属性类型 默认值>
特殊字符 转义字符
< <
> >
" "
& &
空格 &nsbp;
CDATA块
<![CDATA[
内容
]]>
--------------------------------------------------------------------------
约束:
DTD:
内部导入dtd:
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
外部导入dtd:
<!DOCTYPE note SYSTEM "note.dtd">
<!DOCTYPE 根元素 PUBLIC "http://gz.itcast.cn/itcast.dtd">
语法
约束标签
<!ELEMENT 元素名称 类别> 或 <!ELEMENT 元素名称 (元素内容)>
类别:
空标签: EMPTY。 表示元素一定是空元素。
普通字符串: (#PCDATA)。表示元素的内容一定是普通字符串(不能含有子标签)。
任何内容: ANY。表示元素的内容可以是任意内容(包括子标签)
(元素内容)
顺序问题:
<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>: 按顺序出现子标签
次数问题:
标签 : 必须且只出现1次。
标签+ : 至少出现1次
标签* : 0或n次。
标签? : 0 或1次。
约束属性
<!ATTLIST 元素名称 属性名称 属性类型 默认值>
默认值:
#REQUIRED 属性值是必需的
#IMPLIED 属性不是必需的
#FIXED value 属性不是必须的,但属性值是固定的
#REQUIRED 属性值是必需的
#IMPLIED 属性不是必需的
#FIXED value 属性不是必须的,但属性值是固定的
属性类型:控制属性值的
CDATA :表示普通字符串
(en1|en2|..): 表示一定是任选其中的一个值
ID:表示在一个xml文档中该属性值必须唯一。值不能以数字开头
XSD(Schema):
XML Schema 最重要的能力之一就是对数据类型的支持。
xsd:
<xs(名称空间):schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.itcast.cn"
elementFormDefault="qualified">
xml:
<itcast:XX xmlns:itcast="http://www.itcast.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"(默认标准)
xsi:schemaLocation="http://www.itcast.cn ZZ.xsd">
XX标签受 ZZ.xsd约束
CDATA :表示普通字符串
(en1|en2|..): 表示一定是任选其中的一个值
ID:表示在一个xml文档中该属性值必须唯一。值不能以数字开头
XSD(Schema):
XML Schema 最重要的能力之一就是对数据类型的支持。
xsd:
<xs(名称空间):schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.itcast.cn"
elementFormDefault="qualified">
xml:
<itcast:XX xmlns:itcast="http://www.itcast.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"(默认标准)
xsi:schemaLocation="http://www.itcast.cn ZZ.xsd">
XX标签受 ZZ.xsd约束
http://www.w3school.com.cn/schema/schema_schema.asp
---------------------------------------------------------------------------------------------
DOM解析 面向对象(Document)
节点(Node)类型:标签(Element) 属性(Attribute) 文本(Text) 注释(Comment) 节点;
Document对象—>节点对象->xml文档内容;
Dom4j:
读:
//读取xml文档并且返回document对象
SAXReader reader=new SAXReader();
Document doc=reader.read(new File("./src/test_1.xml"));
Element(标签节点对象).nodeIterator(); //获取当前标签节点下的所有直接子节点
Document.getRootElement(); //获取xml文档的根标签
ELement.element("标签名") //指定名称的第一个子标签
Element.elementIterator("标签名");// 指定名称的所有子标签
Element.elements(); //获取所有子标签
获取深层次标签也只能一层一层的获取;
Element.attributeValue("属性名") //返回(String类型)指定属性的属性值
Element.attribute("属性名");//返回指定的属性对象
Element.attributes(); //返回(List<Attribute>)所有属性对象
Element.attibuteIterator(); //返回(Iterator<Attribute>)所有属性对象
Element.getText(); //返回当前标签的文本
Element.elementText("标签名") //返回当前标签的指定名称的子标签的文本内容
*xml中,空格和换行被作为原始内容处理;
写:
XMLWriter writer = new XMLWriter(OutputStream,OutputForamt)
OutputForamt:指定写出格式;
1
OutputFormat.createCompactFormat()//紧凑的写入
OutputFormat.createPrettyPrint()//漂亮的写入
2
OutputForamt类对象.setEncoding("utf-8");
wirter.write(Document);
DocumentHelper.createDocument() //新建一个document对象
doc.addElement("名称") 增加标签
ele.addAttribute("名称",“值”) 增加属性
Attribute.setValue("值") 修改属性值
Element.addAtribute("同名的属性名","值") 修改同名的属性值
Element.setText("内容") 修改文本内容
Element.detach(); 删除标签
Attribute.detach(); 删除属性
xPath技术
快速获取所需的节点对象。
导入jaxen-1.1-beta-6.jar包后,dom4j支持xPath技术
selectNodes("xpath表达式"); 返回多个节点对象List;
selectSingleNode("xpath表达式"); 返回一个节点对象;
xPath语法
/ 绝对路径 表示从xml的根位置开始或直接子元素
// 相对路径 表示不分任何层次结构的选择元素。
* 通配符 表示匹配所有元素
[] 条件 表示选择什么条件下的元素
[1](第一个) [last()]最后一个
@ 属性 表示选择属性节点
//@id(返回id属性) //bbb[@id=] 返回含有id属性的bbb标签
and 关系 表示条件的与关系(等价于&&)
text() 文本 表示选择文本内容
-------------------------------------------------------------------------------------------------
SAX解析 面向过程
jdk中 org.xml.sax.*
SAXParser类: 用于读取和解析xml文件对象
SAXParser parser=SAXParserFactory.newInstance().newSAXParser();
parse(File?f, DefaultHandler?dh)方法: 解析xml文件
DefaultHandler: SAX事件处理程序的默认基类
-------------------------------------------------------------------------------------------------------------------
DOM解析 | SAX解析
-------------------------------------------------------------------------------------------------------------------
原理: 一次性加载xml文档,不适合大容量的文件读取 | 原理: 加载一点,读取一点,处理一点。适合大容量文件的读取
DOM解析可以任意进行增删改成 | SAX解析只能读取
DOM解析任意读取任何位置的数据,甚至往回读 | SAX解析只能从上往下,按顺序读取,不能往回读
DOM解析面向对象的编程方法(Node,Element,Attribute)| 面向过程
-------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------
DOM解析 面向对象(Document)
节点(Node)类型:标签(Element) 属性(Attribute) 文本(Text) 注释(Comment) 节点;
Document对象—>节点对象->xml文档内容;
Dom4j:
读:
//读取xml文档并且返回document对象
SAXReader reader=new SAXReader();
Document doc=reader.read(new File("./src/test_1.xml"));
Element(标签节点对象).nodeIterator(); //获取当前标签节点下的所有直接子节点
Document.getRootElement(); //获取xml文档的根标签
ELement.element("标签名") //指定名称的第一个子标签
Element.elementIterator("标签名");// 指定名称的所有子标签
Element.elements(); //获取所有子标签
获取深层次标签也只能一层一层的获取;
Element.attributeValue("属性名") //返回(String类型)指定属性的属性值
Element.attribute("属性名");//返回指定的属性对象
Element.attributes(); //返回(List<Attribute>)所有属性对象
Element.attibuteIterator(); //返回(Iterator<Attribute>)所有属性对象
Element.getText(); //返回当前标签的文本
Element.elementText("标签名") //返回当前标签的指定名称的子标签的文本内容
*xml中,空格和换行被作为原始内容处理;
写:
XMLWriter writer = new XMLWriter(OutputStream,OutputForamt)
OutputForamt:指定写出格式;
1
OutputFormat.createCompactFormat()//紧凑的写入
OutputFormat.createPrettyPrint()//漂亮的写入
2
OutputForamt类对象.setEncoding("utf-8");
wirter.write(Document);
DocumentHelper.createDocument() //新建一个document对象
doc.addElement("名称") 增加标签
ele.addAttribute("名称",“值”) 增加属性
Attribute.setValue("值") 修改属性值
Element.addAtribute("同名的属性名","值") 修改同名的属性值
Element.setText("内容") 修改文本内容
Element.detach(); 删除标签
Attribute.detach(); 删除属性
xPath技术
快速获取所需的节点对象。
导入jaxen-1.1-beta-6.jar包后,dom4j支持xPath技术
selectNodes("xpath表达式"); 返回多个节点对象List;
selectSingleNode("xpath表达式"); 返回一个节点对象;
xPath语法
/ 绝对路径 表示从xml的根位置开始或直接子元素
// 相对路径 表示不分任何层次结构的选择元素。
* 通配符 表示匹配所有元素
[] 条件 表示选择什么条件下的元素
[1](第一个) [last()]最后一个
@ 属性 表示选择属性节点
//@id(返回id属性) //bbb[@id=] 返回含有id属性的bbb标签
and 关系 表示条件的与关系(等价于&&)
text() 文本 表示选择文本内容
-------------------------------------------------------------------------------------------------
SAX解析 面向过程
jdk中 org.xml.sax.*
SAXParser类: 用于读取和解析xml文件对象
SAXParser parser=SAXParserFactory.newInstance().newSAXParser();
parse(File?f, DefaultHandler?dh)方法: 解析xml文件
DefaultHandler: SAX事件处理程序的默认基类
-------------------------------------------------------------------------------------------------------------------
DOM解析 | SAX解析
-------------------------------------------------------------------------------------------------------------------
原理: 一次性加载xml文档,不适合大容量的文件读取 | 原理: 加载一点,读取一点,处理一点。适合大容量文件的读取
DOM解析可以任意进行增删改成 | SAX解析只能读取
DOM解析任意读取任何位置的数据,甚至往回读 | SAX解析只能从上往下,按顺序读取,不能往回读
DOM解析面向对象的编程方法(Node,Element,Attribute)| 面向过程
-------------------------------------------------------------------------------------------------------------------