xml简单知识

来源:互联网 发布:怎么玩转淘宝千人千面 编辑:程序博客网 时间:2024/06/05 03:05

02.XML_XML概念_什么是XML【重点】
1).什么是"XML":XML全称为Extensible Markup Language,意思是可扩展的"标记"语言。
2).XML本质上就是一个"文本文件",只是它内部由:标记 + 数据 组成。


03.XML_XML概念_XML的作用【重点】
1).存储数据:
students.xml
--------------------------------
<students>
<student>
<id>001</id>
<name>张三</name>
<age>20</age>
<sex>男</sex>
</student>
<student>
<id>002</id>
<name>李四</name>
<age>22</age>
<sex>男</sex>
</student>
<student>
<id>003</id>
<name>王五</name>
<age>18</age>
<sex>男</sex>
</student>
</students>
2).配置文件【重点掌握,以后WEB阶段常用】:
<classes>
<class name = "cn.itheima.demo07.User">
<uid>001</uid>
<username>jack</username>
<password>123</password>
</class>
<class name = "cn.itheima.demo07.Studebt">
<sid>001</sid>
<stuName>zhangsan</stuName>
<age>20</age>
<sex>m</sex>
</class>
</classes>
3).XML文档与普通的txt文档对比的好处:
1).尤其是当需要存储大量数据时,如果都写在txt文档中,内容混乱,不易管理。
  这时可以使用XML文档,它可以为每个数据起一个"名字(标签)",另外标签与标签之间可以有
  包含关系,这样就形成了"层次",非常的易读,从而易于维护和管理。


====================================================================================
04.XML_XML语法_文档声明【重点】
1).一个格式良好的XML文档,应该有一个"文档声明";
2).格式:
<?xml version = "1.0/1.1" encoding = "UTF-8" ?>
3).格式说明:
1).开始必须是:"<?xml",三个字符之间不能有空格;
2).包含两个属性:
version : 取值只能是1.0或者1.1。常用:1.0
encoding : XML文档编码方式。如果有中文要使用:UTF-8或者GBK
3).结束必须是:"?>",两个字符之间不能有空格。
4).使用说明:
1).对于一个XML文档,文档声明不是必须的。一个格式良好的XML文档,应该有一个"文档声明";
2).如果XML文档中需要文档声明,这个"文档声明"只能有一个,而且必须在这个XML文档的0行0列的位置。
  前面不能有空格,空行,注释。

05.XML_XML语法_元素(标签)【重点】
1).元素:也叫:标签、标记。它就是为数据起的一个"名字"。标签之间可以"嵌套",这样就可以使数据具有层次感。
2).元素的名称:
1).由程序员自行定义。
2).只能以"_",":"开头,其他符号(英文)和数字不能开头。
3).名字中间不能包含:空格,等其他符号,但可以包含:下划线,冒号(但不建议)
4).例如:
<s tu></s tu> //错误
<_stu></_stu> //OK的
<_1stu></_1stu> //OK的
<1stu></1stu> //错误
<stu2></stu2> //OK的
<s-t-u></s-t-u>//OK的
<s:tu></s:tu> //OK的
<s?tu></s?tu> //错误
<s=stu></s=stu>//错误
5).在一个XML中,标签名是区分大小写的:
<student></student>
<Student></Student>//OK的,解析时,会根据大小写,正确读取。


3).元素的格式:
1).完整元素(完整标签):有开始标签,有结束标签的,中间是子元素,或者数据。
<student>
<name>张三</name>
</student>
2).单标签:只有开始标签,同时也是结束标签。一般它的数据是记录它的属性中的。
<url location = "http://www.baidu.com" port = "80" />
4).一个格式化良好的文档,有且只有一个"根元素"。在Eclipse下,多个根元素会报错。
06.XML_XML语法_属性【重点】
1).我们可以为某个"标签"定义若干多的"属性",它作用也是:记录数据。
2).为什么要使用"属性":为了格式化,为了文档易读,易管理。
例如:
<students>
<student id = "1">
<name>刘德华</name>
<age>20</age>
</student>


<student id = "2">
<name>张学友</name>
<age>22</age>
</student>
</students>
3).属性的语法格式:
1).它必须出现在开始标签中。
2).一个标签可以有0或多个属性,但多个属性不能同名。
  多个属性之间,使用"空格"隔开。
3).格式必须是:属性名 = "值"
  值必须要用一对单引号或一对双引号括起来。


07.XML_XML语法_注释【重点】
1).注释的格式:
<!--   内部注释 -->
2).使用位置:
1).必须在标签外部,不能在标签的内部;
2).注释不能嵌套;
3).注释不能写在"文档声明"前面
08.XML_XML语法_转义字符【重点--背下来】
1).例如:
<code>a < b</code>
2).转义字符:
1)."<" : &lt;
2).">" : &gt;
3). "  : &quot;
4). '  : &apos;
5). &  : &amp;
3).例如:
<code>
String s = "abc";
int count = 0;
for(int i = 0;i < s.length() ; i++){
char c = s.charAt(i);
if(c > 'a' && c < 'z'){
count++;
}
}
System.out.println("count = " + count);
</code>
改为使用转义字符:
<code>
String s = &quot;abc&quot;;
int count = 0;
for(int i = 0;i &lt; s.length() ; i++){
char c = s.charAt(i);
if(c &gt; &apos;a&apos; &amp;&amp; c &lt; &apos;z&apos;){
count++;
}
}
System.out.println(&quot;count = &quot; + count);
</code>
09.XML_XML语法_CDATA区【重点】
1).如果"数据中"需要转义的字符较多,这样写起来比较费事,可读性也差。
  这时可以使用CDATA区:
  例如:上面的代码可以改为:
<code>
<!-- 内部的数据全部作为数据解析,不作为格式化符号解析 -->
<![CDATA[
String s = "abc";
int count = 0;
for(int i = 0;i < s.length() ; i++){
char c = s.charAt(i);
if(c > 'a' && c < 'z'){
count++;
}
}
System.out.println("count = " + count);
]]>
</code>
====================================================================================
10.XML_XML解析_DOM_SAX_PULL_三种解析方式介绍【重点】
1).DOM解析:将文档的整体结构一次性读取到内存,并生成"DOM树",在内存中会保留整体的文档结构。
   优点:保留整体结构,可以对"元素"进行添加、修改、删除等操作。
   缺点:由于一次读取到内存,所以比较占资源。


2).SAX解析:逐行解析,解析一行丢掉一行。
   优点:快
   缺点:没有整体结构,不能对元素进行添加、修改、删除。
3).PULL解析:Android内置的XML解析方式,类似SAX。


很多出名的第三方工具,都是第一种和第二种解析方式的结合。


11.XML_XML解析_几种解析器介绍【重点】
1).JAXP:sun公司提供支持DOM和SAX开发包
2).JDom:dom4j兄弟
3).jsoup:一种处理HTML特定解析开发包
4).dom4j【我们要学习的,重点掌握】:比较常用的解析开发包,hibernate底层采用。内部结合了DOM和SAX两种解析方式。




12.XML_XML解析_XML解析原理及结构模型:
1).XML解析工具解析XML文档:是通过"识别标签",并将标签中的属性及值、子元素及其子元素的属性和值、孙元素及其属性和值全部读取到
                          内存中,并保留文档结构。并且创建对象,我们可以通过这个对象获取内部的标签信息以及属性、数据等信息。
2).各种解析工具将XML文档读取到内存后,会使用"DOM模型"来封装:
DOM对象(Document对象)
 |--根元素--属性
|--子元素1--属性
|--子元素1--属性、数据
|--子元素2--属性、数据
....
|--子元素2--属性
....
  每个元素的"属性"和"值"都会单独封装为对象,然后将这些对象封装到它们的"元素对象"中。
  多个"元素对象"再封装到它们的"父元素"对象中,依次类推,直到全部封装到"根元素",并将
  "根元素"封装到DOM对象中。
13.XML_XML解析_dom4j的使用步骤_常用类和方法【重点】
1).要使用dom4j解析,就要导入dom4j的jar包,并添加到构建路径;
dom4j-1.6.1.jar
2).编码实现:
1).创建SAXReader对象
SAXReader reader = new SAXReader();
2).读取XML文件,并生成DOM树;
Document dom = reader.read(new File("classes.xml"));
3).通过dom对象,获取根元素;
Element root = dom.getRootElement();
4).通过根元素获取它的子元素;
Element的常用方法:
1).public List elements():获取当前元素的所有子元素;
2).public List elements(String eleName):获取某个名称的多个子元素。
3).public String attributeValue(String attName):获取当前元素的attName属性的值。
4).public String getName():获取当前元素的元素名;
5).public String getText():获取当前元素的数据;
6).public String elementText(String eleName):直接获取当前元素的"eleName子元素"的数据。




14.XML_XML解析_案例实现_读取student.xml【重点】
1).需求:有如下XML文档:
beans.xml
----------------------------------------------------
<beans>
 <bean id="001" className="cn.itcast.demo.User">
    <property name="username" value="jacl"></property>
    <property name="password" value="123"></property>
 </bean>
 
  <bean id="002" className="cn.itcast.demo.Admin">
    <property name="uname" value="admin"></property>
    <property name="upwd" value="1111"></property>
 </bean>
</beans>
  要求:读取XML文档中的数据,根据配置信息,反射创建每个类的对象,并为相应的属性赋值。要求调用setXxx方法赋值。
==============================================================================================================================
15.XML_约束的概念_含义_作用【重点】
1).XML中标签的名字由程序员自定义的,但在业务范围内,元素名称也不能乱定义,如果出现了与业务不符合的数据,后期读取时
  会造成很大的麻烦,所以,我们可以使用一个"约束文档"对这个XML文件中的元素及其内容进行"约束"。
2).约束文档作用:
1).它可以约束XML中可以出现哪些元素,以及它们之间的层次关系。
2).可以约束元素的属性。
3).可以约束元素的顺序;
....


16.XML_DTD约束_DTD概述和DTD引入方式
1).XML文档:
<beans>
<bean id = "" className = "">
<property name = "" value = "">aaa</property>
</bean>
<import resource = "" >aaa</import>
</beans>
2).引入方式:
1).将DTD约束直接写在XML文档中:XML和DTD混杂在一起,比较乱
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans [
<!ELEMENT beans (bean*,import*) >
<!ELEMENT bean (property*)>
<!ELEMENT property (#PCDATA)>

<!ELEMENT import (#PCDATA)>

<!ATTLIST bean id CDATA #REQUIRED
className CDATA #REQUIRED
>

<!ATTLIST property name CDATA #REQUIRED
value CDATA #REQUIRED
>

<!ATTLIST import resource CDATA #REQUIRED>
]>
<beans>

</beans>
2).引入本地的DTD文件:
1).要先写一个DTD文档;beans.dtd
2).在XML中引入:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans SYSTEM "beans.dtd">
3).引入网络的DTD文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
   "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>


</beans>


17.XML_DTD约束_使用DTD约束XML文档
<!ELEMENT beans (bean*,import*) > //对beans元素进行约束:它下面只能有bean子元素和import子元素,而且必须按顺序出现,而且可以出现0次或多次
<!ELEMENT bean (property*)> //对bean元素约束:它下面只有一个property子元素,可以出现0次到多次。
<!ELEMENT property (#PCDATA)> //对property元素约束:它下面只能包含数据。


<!ELEMENT import (#PCDATA)> //对import元素约束:它下面只能包含数据。


<!ATTLIST bean id CDATA #REQUIRED
  className CDATA #REQUIRED//对bean的属性设置:id属性,必须出现;className属性,必须出现
>


<!ATTLIST property name CDATA #REQUIRED
  value CDATA #REQUIRED//对property属性设置:name和value属性必须出现。
>


<!ATTLIST import resource CDATA #REQUIRED>//对import元素属性的设置:resource属性必须出现。


====================================================================================
18.XML_Schema约束_Schema概述和Schema的引入方式【重点】
1).Schema约束的好处:它提供了比DTD更详细的设置:
例如:它可以约束元素具体出现多少次;
     它可以设置具体数据类型:int,double,date....
     ....
2).步骤:
1).编写Schema文档;
2).在XML中引入:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.itcast.cn/bean"  //<根元素名  xmlns = "名称空间的名字" 注意:要跟Schema中的targetNamespace的值一致。
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.itcast.cn/bean bean-schema.xsd" //xsi:schemaLocation = "名称空间的名字 Schema的文件名"
>

</beans>
19.XML_Schema约束_使用Schema约束约束XML文档
<?xml version="1.0" encoding="UTF-8"?>

<schema xmlns="http://www.w3.org/2001/XMLSchema"//文档根元素必须叫:schema
targetNamespace="http://www.itcast.cn/bean"//定义名称空间,给XML文档关联使用
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://www.itcast.cn/bean" 
elementFormDefault="qualified">
<!-- 声明根标签 -->
<element name="beans">//对beans元素进行约束
<complexType> //表示:定义复合类型(子元素/属性)
<choice minOccurs="0" maxOccurs="unbounded">//表示:choice表示:下面的子元素可以不按顺序出现。minOccurs和maxOccurs:表示最少和最多出现的次数。
<element name="bean">//对bean元素进行约束
<complexType>
<sequence minOccurs="0" maxOccurs="unbounded">//表示:里面的元素要按顺序出现。
<element name="property">
<complexType>
<attribute name="name" use="required"></attribute>
<attribute name="value" use="required"></attribute>
</complexType>
</element>
</sequence>
<attribute name="id" use="required"></attribute>
<attribute name="className" use="required"></attribute>
</complexType>
</element>
<element name="import">
<complexType>
<attribute name="resource" use="required"></attribute>
</complexType>
</element>
</choice>
</complexType>
</element>
</schema>


20.XML_Schema约束_Schema文档头_名称空间说明
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.itcast.cn/bean"  //<根元素名  xmlns = "名称空间的名字" 注意:要跟Schema中的targetNamespace的值一致。
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.itcast.cn/bean bean-schema.xsd" //xsi:schemaLocation = "名称空间的名字 Schema的文件名"
>

</beans>
==============================================================================================================================================
学习目标总结:
01.能够说出XML的作用
1).存储数据;
2).配置文件【常用】
02.能够编写XML文档声明
<?xml version = "1.0" encoding = "UTF-8" ?>
03.能够编写符合语法的XML
参考语法格式:
1).元素语法格式:
2).属性的语法格式:
3).注释:
4).转义字符:
5).CDATA区:
04.能够通过DTD约束编写XML文档
参考demo04
05.能够通过Schema约束编写XML文档
参考demo05
06.能够通过Dom4j解析XML文档【必须掌握】
参考demo02和demo03

原创粉丝点击