我觉得还是先学一学吧……

概念:Extensible Markup Language:可扩展标记语言

        可扩展:标签都是自定义

功能:

        储存数据

                配置文件

                在网络中传输

与HTML区别:

        xml标签自定义,html标签预定义

        xml标签语法严格,html语法松散

        xml是储存数据的,html展示数据

<?xml version='1.0'?>
<users>
    <user id="1">
        <name>zhangsan</name>
        <age>23</age>
        <gender>male</gender>
    </user>

    <user id="2">
        <name>lisi</name>
        <age>28</age>
        <gender>female</gender>
    </user>
</users>

基本语法:

        后缀名为.xml

        第一行必须定义文档声明:

<?xml version='1.0'?>

        文档中有且仅有一个根标签:

<users>

</users>

        属性值必须使用引号

        标签必须正确关闭

        标签名称区分大小写

组成部分:

文档声明

        格式:<?xml 属性列表 ?>

        属性列表:

                        version:版本号(必须)

                        encoding:编码方式

                        standalone:是否独立,yes,依赖其他文件;no,不依赖其他文件

指令:组合css

标签:自定义

        也有命名规则,获取可以参考java

属性:id属性值唯一

文本:特殊字符需转义

        CDATA区:数据被原样展示

        格式:<![CDATA[数据]]>

约束:定义xml文档的书写规则

        作为框架的使用者:需要会引入约束文档、读懂

分类:

        DTD:一种简单的约束技术

        Schema:一种复杂的约束技术

DTD:

引入dtd文档到xml文档

        内部dtd:将约束规则定义在xml文档中

<?xml version="1.0"?>
<!DOCTYPE note [
        <!ELEMENT note (to,from,heading,body)>
        <!ELEMENT to (#PCDATA)>
        <!ELEMENT from (#PCDATA)>
        <!ELEMENT heading (#PCDATA)>
        <!ELEMENT body (#PCDATA)>
        ]>
<!--!DOCTYPE note (第二行)定义此文档是 note 类型的文档。
!ELEMENT note (第三行)定义 note 元素有四个元素:"to、from、heading,、body"
!ELEMENT to (第四行)定义 to 元素为 "#PCDATA" 类型
!ELEMENT from (第五行)定义 from 元素为 "#PCDATA" 类型
!ELEMENT heading (第六行)定义 heading 元素为 "#PCDATA" 类型
!ELEMENT body (第七行)定义 body 元素为 "#PCDATA" 类型-->

<note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend</body>
</note>

        外部dtd:将约束规则定义在外部的dtd文件中

                本地:<!DOCTYPE 根标签名 SYSTEM "dtd文件的位置">

note.dtd 外部文件内容
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
xml文件:
<?xml version="1.0"?>
<!--外部文件导入<!DOCTYPE 根标签名 SYSTEM "dtd文件的位置">-->
<!DOCTYPE note SYSTEM "note.dtd">
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>
网络:<!DOCTYPE 根标签名 PUBLIC "dtd文件的名字"  "dtd文件的位置(url)" >
Schema

原来学Spring框架的时候遇到的配置文件就是这玩意儿

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation=
               "http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans.xsd
               http://www.springframework.org/schema/context
               http://www.springframework.org/schema/context/spring-context.xsd">
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driver}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="user" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
     </bean>
    <!--组件扫描配置-->
    <context:component-scan base-package="com.zhang"/>
</beans>

解析:操作xml文档,将数据读取到内存中

操作xml文档:

        解析(读取):将文档中的数据读取到内存中

        写入:将内存中的数据保存到xml文档中。持久化储存。

解析方式(思想):

1、DOM:将标记语言文档一次性加载进内存,在内存中形成一棵dom树

        优点:操作方便,可以对文档进行增删改查的所有操作

        缺点:占内存

2、SAX:逐行读取,基于事件驱动

        优点:不占内存

        缺点:只能读取,不能增删改

常见解析器:

        JAXP:sun公司提供的解析器,支持dom和sax两种思想

        DOM4J:非常优秀

        Jsoup:本来用于解析html,

        PULL:Android操作系统内置解析器,sax方式