xml


    * XML(*****)    
        
        * XML的简介
            * XML    可扩展的标记语言。(和HTML非常类似的)
                * 可扩展的。
                * 自定义的标签。    
                
            * XML传输数据,HTML是显示数据。
            
        * XML的版本:    XML1.0(使用该版本)        XML1.1(不向下兼容)
        * 做什么用?
            * 描述有关系的数据
            
        * 应用
            * 作为配置文件。
                
            * 可以在系统与系统之间进行数据的传输。
                * webserivice    soap    XML封装数据
                * json    和XML概念    
                    
        * XML的语法
            * 文档声明(*****)
                * 写法:    <?xml version="1.0"  ?>
                * 文档声明必须出现在xml文件的第一行和第一列的位置。
                
                * 属性:
                    * version="1.0"                XML的版本    (必须写)
                    * encoding="UTF-8"            编码集        (可选的)
                    * standalone="yes或者no"    代表xml的文件是否是独立的。(如果是no,不独立,可以引入外部的文件)(可选的)
                        * 因为不写该属性,可以引入外部的文件。
                    
                * 乱码会伴随你们一生?
                    * 产生的原因:保存文件时和打开文件时采用的编码不一致。
                    * 解决办法:保存文件可打开文件采用的编码一致就ok。(MyEclipse不会产生乱码问题)
                        
                        
            * 元素(***)
                * 开始标签和结束标签。
                    * 包含标签主体:    <abc>文本</abc>
                    * 不包含标签主体:    <abc/>
                    
                * 不能交叉嵌套    
                * 只能有一个根元素(必须有,并且只能有一个)
                
                * 命名规范:
                    * 区分大小写                    错误的:<a></A>    代表两个标签
                    * 不能以数字和-中划线开头        错误的:<1a>        <-a>
                    * 不能以XML(Xml    XML  xml)开头    错误的:<xmlaa>
                    * 不能包含空格和冒号。
                        

            * 属性(***)
                * 自定义:命名规范同上。
                * 在同一个元素上,不能有相同的属性。(*****)
                * 可以使用双引号或者单引号。
                
                
            * 注释(*)
                * 和HTML的注释相同
                <!-- XML的注释 -->
                
                * 注释不能嵌套。
                
            * 特殊字符
                * <        &lt;
                * >        &gt;
                * &        &amp;
                * "        &quot;
                * '        &apos;
                
            * CDATA区
                * 把标签中的内容作为字符串。
                * 语法:
                    <![CDATA[
                        内容:当成字符串
                    ]]>
            
            * PI(处理指令)
                * 替换HTML
                
        
        * XML的约束
            * DTD
            * schema
            
            <myspring>
                <bean>hello.java</bean>
                <猫/>
            </myspring>
                
            * 格式良好的XML:遵循语法规范。    
            * 有效的XML:有约束。
            
            
        * DTD的约束
            * 快速入门
            * 快速入门的步骤:
                * 需要出现哪些标签?
                * 在DTD的文件中编写元素
                    <!ELEMENT 元素名称 元素类型>
                * 判断元素是否是复杂还是简单元素?
                    * 如果是简单元素:(#PCDATA)    代表是字符串
                    * 如果是复杂元素:(子节点)
                    
                * 需要在book.xml引入DTD的文件
                    * <!DOCTYPE 根节点 SYSTEM "DTD文件的地址">
            
            * DTD与XML文档的关联方式
                * 可以在XML的文件中直接书写DTD的代码。(经常使用)
                    <!DOCTYPE 根节点 [
                        DTD的代码
                    ]>
                
                * 引入本地的DTD文件(经常使用)
                    <!DOCTYPE 根节点 SYSTEM "DTD文件的地址">
                
                * 引入网络上的DTD文件
                    <!DOCTYPE 根节点 PUBLIC "DTD文件名称" "DTD文件的地址">
                    
                    
            * 元素定义
                * 语法:<!ELEMENT 元素名称    元素类型>
                    
                    * (#PCDATA)        字符串
                    * EMPTY            空
                    * ANY            任意的
                    * (子元素)
                    
                    * 子元素:
                        * 子元素之间的关系
                            * ,        子元素出现是有顺序的
                            * |        子元素只能出现一个
                            
                        * 子元素出现的次数
                            *     +        子元素出现1次或多次
                            *     *        子元素出现0次或多次
                            *     ?        子元素出现0次或1次
                    
                <!ELEMENT MYFILE ((TITLE*, AUTHOR?, EMAIL)* | COMMENT)>     
                    
                    <MYFILE>
                        <TITLE></TITLE>
                        <AUTHOR></AUTHOR>
                        <EMAIL></EMAIL>
                        <TITLE></TITLE>
                        <AUTHOR></AUTHOR>
                        <EMAIL></EMAIL>
                        <TITLE></TITLE>
                        <AUTHOR></AUTHOR>
                        <EMAIL></EMAIL>
                    </MYFILE>
                    
                    
                    
            * 属性定义(AttributeList)
                * 写法:    <!ATTLIST 元素名称
                                属性名称 属性类型 属性约束
                                属性名称 属性类型 属性约束
                            >
                * 属性类型
                    * CDATA        字符串
                    * 枚举(没有提供关键字)    (男人|女人)
                    * ID    代表唯一的值,不能只写数字
                    
                * 属性的约束
                    * #REQUIRED        必须出现的
                    * #IMPLIED        可选的
                    * #FIXED        固定值    #FIXED "值"
                    * 默认值(不用)
                    

            * 实体定义(用的不多)    
                * <!ENTITY 别名 "值" >

                * 需要在xml中引入别名,浏览器打开文件后,在引入的位置上显示值的。





            

           XML解析方式有两种:dom和sax

                document object model,文档对象模型。是W3C推荐处理XML的一种方式。

                simple API for XML,不是官方标准,属于开源社区XML-DEV,但是几乎所有XML解析器都支持它。

           XML解析开发包

            JAXP是SUN公司推出的解析标准实现。

            DOM4J是开源组织推出的解析开发包。

            JDOM是开源组织推出的解析开发包。

            

        * 解析XML
            * 解析XML的方式有哪些呢?
                * 常用的有两种?DOM和SAX
                * 区别:
                    DOM解析XML
                      * 在内存中形成树状结构
                      * 缺点:如果文档过大,容易产生内存溢出的问题。  
                      * 优点:方便做增删改的操作    
                        
                    SAX解析
                      * 基于事件驱动,边读边解析
                      * 优点:不会产生内存溢出问题。
                      * 缺点:不能做增删改操作。(DOM4J在内存生成树状结构)
        
                *,只能使用DOM方式,如果SAX,只能做查询。
                * DOM4J(*****) JAXP                SUN提供的
                        * 想做增删改    企业都在用。DOM4J提供的
                        * 全部都可以做。
                * JDOM(不讲了)    
            

           

        JAXP:(Java API for XML Processing)开发包是JavaSE的一部分,它由以下几个包及其子包组成:
                org.w3c.dom:提供DOM方式解析XML的标准接口
                org.xml.sax:提供SAX方式解析XML的标准接口
                javax.xml:提供了解析XML文档的类

        * JAXP的解析HTML
            * DOM
                * DocumentBuilderFactory    :解析器工厂类
                * DocumentBuilder    获取解析器对象
                * 解析XML(Document parse(String uri) )
                    // 获取解析器工厂类
                    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                    // 获取解析器对象
                    DocumentBuilder builder = factory.newDocumentBuilder();
                    // 解析XML的文档,返回document对象
                    Document document = builder.parse("src/book2.xml");
                
                
            * 回写
                * 获取回写的工厂类
                * 获取回写对象
                * 调用回写的方法进行回写。
                    // 创建回写类的工厂
                    TransformerFactory transformerFactory =  TransformerFactory.newInstance();
                    // 获取回写类
                    Transformer transformer = transformerFactory.newTransformer();
                    // 调用回写的方法

                    transformer.transform(new DOMSource(document), new StreamResult("src/book2.xml"));


            * XML的约束(schema,看懂)
        * schema约束:
            * schema和DTD的对比(面试题):
                * schema符合XML的语法结构。        
                * 可以解析schema文档。
                * schema对名称空间支持的好。                
                * schem支持更多的数据类型,自定义的数据类型。
                
                
            * 预先定义元素和属性
            * schema的后缀名是.xsd
            * 只能有一个根节点,名称是schema。
            
        * 开发步骤
            * 开发schema的约束文档
                * 引入W3C的名称
                    * 在根节点上,使用属性xmlns(xml namespace)
                    * xmlns="http://www.w3.org/2001/XMLSchema"
                * 定义元素
                    * <element name="书架"></element>
                * 判断是否是复杂还是简单的元素
                    * 如果是简单    在element有属性    type="数据的类型"    
                    * 如果是复杂    
                        * 声明标签是复杂的元素    <complexType>
                        * 子元素之间的关系    <sequence>
                * 起名:targetNamespace    目标名称空间(起名)
                    * 值是任意的:http://www.itcast.cn/1110
                    
                * elementFormDefault    :
                    * qualified(使用)    :质量好的
                    * unqualified        :质量不好的
                    
            * 在XML文档中引入自己编写的schema文档
                * 引入W3C名称空间,我是实例文档。
                    * xmlns="http://www.w3.org/2001/XMLSchema-instance"
                * 引入自己编写的schema的文档
                    * xmlns="http://www.itcast.cn/1110"
                * 问题:元素上不能有相同的属性名称
                    * 解决:起别名        :aa
                    * 技巧:在下面出现标签的概率小起别名
                * 引入自己编写的schema文档的地址
                    * schemaLocation属性是W3C提供的,如果W3C名称空间要是有别名的话,先把别名写上。
                        xsi:schemaLocation="名称空间   schema文件的地址"
                
                
        * 名称空间的概念
            * 编写完schema文档,起唯一的名称空间。
            * 在编写XML文档,通过xmlns来引入名称空间。
                
    * XML的编程
        * JAXP的SAX解析(了解的怎么样解析)
            * 只能做查询,不能做增删改。
            * SAX解析
                * 解析器
                    * 获取解析器的工厂
                    * 获取解析器对象
                    * 解析XML(XML的文件的地址,事件处理器)
                    
                * 事件处理器
                    * 自己编写的类,需要继承DefalutHandler类,重写三个方法。
                    * startElement()
                    * characters()
                    * endElement()
                    
                    
            * SAX的解析原理:        
                解析器采用SAX方式在解析某个XML文档时,它只要解析到XML文档的一个组成部分,        (边读边解析)
                都会去调用事件处理器的一个方法,解析器在调用事件处理器的方法时,
                会把当前解析到的xml文件内容作为方法的参数传递给事件处理器。
                
                事件处理器由程序员编写,程序员通过事件处理器中方法的参数,
                就可以很轻松地得到sax解析器解析到的数据,从而可以决定如何对数据进行处理。
        

        * DOM4J的解析(企业中用的多)
            * 先下载DOM4J相应的jar包。导入工程中,才能使用。
            * 把dom4j-1.6.1.jar导入到工程中。
            * WEB项目:复制dom4j-1.6.1.jar到    WebRoot -- WEB-INF -- lib里面。就ok。
            
            
            
        * DOM4J对XPATH的支持
            * 导入包。jaxen-1.1-beta-6.jar。
            * 怎么使用?
                selectNodes("/AAA")            返回集合
                selectSingleNode()        一个Node对象
                
            * 参数就是xpath的语法
                * /AAA/BBB            获取BBB的节点
                * //BBB                无论层级关系,找到BBB的节点
                * *                    代表是所有
                * /AAA/BBB[1]        找到BBB的第一个        /AAA/BBB[last()]    最后一个
                * @                    属性
                *

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值