传智播客168期JavaEE就业班(第五天 xml约束与解析)

* 课程回顾:
    * DOM解析HTML简介
        * DOM    文档对象模型
        * 解析器
        
    * document对象
        * getElementById("id的值");    返回一个元素(标签)对象
        * getElementsByName("name的名称");    返回数组
        * getElementsByTagName("标签名称");    返回数组
        
        * 创建元素对象
            document.createElement("元素名称");
            document.createTextNode("文本内容");
            appendChild(node);    父节点调用该方法
            insertBefore(new,old)    在指定的节点之前添加子节点
            
    * Element对象
        * 操作属性    setAttribute("","")    设置或者修改属性
                    getAttribute("属性名称");
                    removeAttribute("属性名称");
                    
        * 获取子节点
            getElementsByTagName("子节点的元素名称");
            
    * Node节点对象        
        * nodeName    nodeType nodeValue
        * parentNode    父节点(*****)
        
        * appendChild(node);    父节点调用该方法
        * insertBefore(new,old)    在指定的节点之前添加子节点
        * replaceChild(new,old)    替换节点
        * removeChild(node)        删除节点
        * cloneNode(true或者false)    复制节点
        
    * innerHTML    获取和设置文本内容
        <span></span>
        
    * 事件
        * onclick         点击事件
        * ondblclick    双击事件
        * onload        加载事件
        * onfoucs        获取焦点
        * onblur        失去焦点
        * onchange        改变事件

        
        * onsubmit        控制表单的提交
        
=============================================================================================================
    * onsubmit事件
        * 控制表单提交。    需要把onsubmit作用在表单上        <form  onsubmit="">
        * 值的写法:onsubmit="return run()"
        * run()必须要有返回值,必须返回true或者false。
        * 如果返回是true,表单可以提交,如果返回false,表单不能提交。如果没有返回值,默认是表单提交。
        * run()的逻辑写什么?
            * 表单的校验。
            
    * 可以通过js提交表单。
        // 通过id获取form
        // var form = document.getElementById("formId");
        // 通过form的name的属性获取表单
        var form = document.form1;
        //var name = document.form1.username.value;
        //alert(name);
        
        // 设置提交的路径
        form.action = "success.html";
        form.method = "get";
        // 提交表单
        form.submit();
        
    
    * 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
            * 解析XML的方式有哪些呢?
                * 常用的有两种?DOM和SAX
                * 区别:
                    DOM解析XML
                      * 在内存中形成树状结构
                      * 缺点:如果文档过大,容易产生内存溢出的问题。  
                      * 优点:方便做增删改的操作    
                        
                    SAX解析
                      * 基于事件驱动,边读边解析
                      * 优点:不会产生内存溢出问题。
                      * 缺点:不能做增删改操作。(DOM4J在内存生成树状结构)
        
            *,只能使用DOM方式,如果SAX,只能做查询。
            * DOM4J(*****) JAXP                SUN提供的
                * 想做增删改    企业都在用。DOM4J提供的
                * 全部都可以做。
            * JDOM(不讲了)    
            
            
        * 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"));
            
            
            
* 作业:Node insertBefore(Node newChild, Node refChild)
        在指定的节点之前添加子节点
                
                
    * 更新节点的内容                
    
    
    * 获取标签的属性值
       
   

你可能感兴趣的:(xml,javaee,168期,传智播客学习)