java学习之路-4

前言


java学习之路—–>XML学习

内容


XML学习

XML引入

HTML: 负责网页的结构
CSS: 负责网页的样式(美观)
Javascript: 负责在浏览器端与用户进行交互。

HTML与XML区别
HTML负责静态的网页制作的语言

HTML语言特点:
1)由标签组成。 <title> <p> <hr/> <br/>
2)语法结构松散的    <p></p>   <p>  <P> 
    大小写不区分
    结束标签和开始标签不一定匹配

XML是HTML中的自定义标签

XML作用

描述带关系的数据(软件配置文件)

web服务器(PC): 
学生管理系统 -> 添加学生功能 -> 添加学生页面 -> 
name=eric&email=eric@qq.com  
    前提: 网络(IP地址: oracle:255.43.12.54  端口:1521 )

    java代码:使用ip(255.43.12.54)地址和端口(1521),连接oracle数据
    库,保存学生数据。

    把ip地址端口配置到xml文件:
            host.xml
                <host>
                    <ip>255.43.12.55</ip>
                    <port>1521</port>
                </host>

数据库服务器(PC):
            主服务器(255.43.12.54):Oracle数据库软件(负载)
            副服务器(255.43.12.55):Oracle数据库软件

数据的载体(小型的”数据库”)

教师管理系统:     姓名   工龄+1  邮箱 

发教师数据给财务管理系统: 

    String teacher =    name=张三&email=zhangsan@qq.com&workag
    e=2  字符串
            (问题: 1)不好解析 2)不是规范)

    teacher.xml
        <teacher>    
                <name>张三</name>
                <email>zhangsan@qq.com</email>
                <workage>2</workage>
        </teacher>
这种一种规范

财务管理系统:   

    姓名   工龄+1  邮箱
    发奖金:   统计奖金。   工龄
    发邮件功能: 
            邮箱   姓名   金额

方案一: 在财务管理系统中维护了一套教师信息。
        每年 : 工龄增加  维护了两个系统的信息。

方案二: 教师信息只在教学管理系统中维护。

XML语法

xml文件以xml后缀名结尾。
xml文件需要使用xml解析器去解析。浏览器内置了xml解析器。

标签:

语法:
<student> 开始标签
   student 标签内容
</student> 结束标签

<student />空标签

xml严格区分大小写
xml标签一定要正确配对
xml标签名中间不能加空格
xml标签名不能以数字开头
xml根标签只能有一个

属性:

<student name="eric"> student </student>

xml属性值一定要以引号包含,不能省略,也不能单双引号混用
一个标签内可以有多个属性,但是不能重复

注释:

<!-- xml注释 -->

文档声明:

<?xml version="1.0" encoding="utf-8"?>
version 版本号默认1.0
encoding 解析xml文件时查询的码表(解码过程时查询的码表)

注意:
    1)如果在ecplise工具中开发xml文件,保存xml文件时自动按照文档声明的enco
       ding来保存文件。
    2)如果用记事本工具修改xml文件,注意保存xml文件按照文档声明的encoding的
       码表来保存。

XML转义字符:

在xml中内置了一些特殊字符,这些特殊字符不能直接被浏览器原样输出。
如果希望把这些特殊字符按照原样输出到浏览器,对这些特殊字符进行转义。
转义之后的字符就叫转义字节。

特殊字符  转义字符
 <         &lt;
 >         &gt;
 "         &quot;
&         &amp;
空格      &nsbp;

CDATA块:

作用: 可以让一些需要进行包含特殊字符的内容统一进行原样输出。

<![CDATA[
  <html>

  </html>
]]>

处理指令:

作用: 告诉xml解析如果解析xml文档

案例: 
<?xml-stylesheet type="text/css" href="1.css"?> 告诉xml解析该xml
文档引用了哪个css文件
需要提前xml内容可以使用xml-stylesheet指令指令

XML解析

xml文件除了给开发者看,更多的情况使用程序读取xml文件的内容。这叫做xml解析

XML解析方式

DOM解析
SAX解析

XML解析工具

DOM解析:
    JAXP
    JDOM工具
    Dom4J工具
        三大框框使用

SAX解析:
    SAX解析工具(官方)

什么是DOM解析

xml解析器一次性把整个xml文档加载进内存,然后在内存中构建一颗Document的
对象树,通过Document对象,得到树上的节点对象,通过节点对象访问(操作)到xml文
档的内容

DOM解析

Dom4J工具

非官方,不在jdk

使用步骤:
    1)导入dom4j的核心包。 dom4j-1.6.1.jar
    2)编写Dom4j读取xml文件代码

Dom4J读取xml文件

节点:
    iterator Element.nodeIterator;//获取当前标签节点下的所有子节点
标签:
    Element Document.getRootElement();//获取xml文档的根标签
    Element    ELement.element("标签名");//指定名称的第一个子标签
    Iterator<Element> Element.elementIterator("标签名");// 指定名称的
    所有子标签
    List<Element>     Element.elements(); //获取所有子标签

属性:
    String   Element.attributeValue("属性名") //获取指定名称的属性值
    Attribute    Element.attribute("属性名");//获取指定名称的属性对象    
    Attribute.getName()  //获取属性名称
    Attibute.getValue()  //获取属性值
    List<Attribute>     Element.attributes();  //获取所有属性对象
    Iterator<Attribute>        Element.attibuteIterator(); //获取所有属
    性对象

文本:
    Element.getText();  //获取当前标签的文本
    Element.elementText("标签名") //获取当前标签的指定名称的子标签的文本
    内容

Dom4J修改xml文件

写出内容到xml文档

    XMLWrite write = new XMLWriter(OutputStream,OutputForamt);
    write.write(Document);

修改xml文档的api
    增加:
        DocumentHelper.createDocument() 增加文档
        addElement("名称") 增加标签
        addAttribute("名称","内容")
    修改:
        Attribute.setValue("值") 修改属性值
        Element.addAttribute("同名的属性名","值") 修改同名的属性值
        Element.setText("内容") 修改文本内容
    删除:
        Element.detach() 删除标签
        Attribute.detach()删除属性

XML乱码问题

xPath技术

引入
    当dom4j查询比较深的层次结构的节点比较麻烦

作用
    快速获取所需的节点对象

运用
    1) 导入xPath支持包. 
    2) 使用方法
            List<Node> selectNodes("xPath表达式"); 查找多个节点
            Node selectSingleNode("xPath表达式"); 查找一个节点对象

xPath语法

/   绝对路径   表示从xml的根位置开始或者子元素(一个层次结构)
//  相对路径   表示不分任何层次结构的选择元素
*   通配符     表示所有元素
[]  定域       表示选择什么条件下的元素
@   属性       表示选取属性节点

SAX解析

加载一点,读取一点,处理一点,对内存要求低。

SAX解析

SAX解析工具

Sun公司提供,内置在Jdk中。 org.xml.sax

核心Api
    SaxParser类 用于读取和解析xml文件
        parse(File?f, DefaultHandler?dh)放法,解析xml文件

        参数一:File 表示读取的xml文件路径
        参数二:DefaultHandler Sax事件处理程序,使用DefaultHandler的子类

    例如:
    1.创建SAXParser对象  
        SAXParser parser=SAXParserFactory.newInstance().newSAXParse
        r();
    2.调用parse方法
        parser.parse(new File("./src/contact.xml"), new MyDefaultHan
        dler());
        [一个类继承class 类名(extends DefaultHandler)  在调用是创建传
        进去    

DefaultHandler类的APi
    void starDocument() 在读到文档开始时调用
    void EndDocument() 在读到文档结束时调用
    void startElement(String uri, String localName, String qName, At
    tributes attributes)  :读到开始标签时调用                
    void endElement(String uri, String localName, String qName)   
    :读到结束标签时调用
    void characters(char[] ch, int start, int length)  : 读到文本内容
    时调用

DOM解析与SAX解析区别

DOM解析
原理: 一次性加载xml文档,不适合大容量的文件读取
DOM解析可以任意进行增删改成
DOM解析任意读取任何位置的数据,甚至往回读
DOM解析面向对象的编程方法(Node,Element,Attribute),Java开发者编码比较简
单。

SAX解析
原理: 加载一点,读取一点,处理一点。适合大容量文件的读取
SAX解析只能读取
SAX解析只能从上往下,按顺序读取,不能往回读
SAX解析基于事件的编程方法。java开发编码相对复杂。

XML约束

只要能看懂约束内容,根据约束内容写出符合规则的xml文件

引入

xml语法:规范的xml文件的基本编写规则.(由w3c组织规定的)

xml约束:规范xml文件数据内容格式的编写规则.(开发者自己定义)

XML约束技术

DTD约束:语法简单,功能简单
Schema约束:语法复杂,功能相对强大(名称空间)

DTD约束

1)导入方式
    内部导入
    <!DOCTYPE note [
      <!ELEMENT note (to,from,heading,body)>
      <!ELEMENT to      (#PCDATA)>
      <!ELEMENT from    (#PCDATA)>
      <!ELEMENT heading (#PCDATA)>
      <!ELEMENT body    (#PCDATA)>
    ]>
    外部导入
        本地系统导入
            <!DOCTYPE note SYSTEM "note.dtd">
        公共的外部导入
            <!DOCTYPE 根元素 PUBLIC "网络地址.dtd">

2)DTD语法
    约束标签
        <!ELEMENT 元素名称 类别>  或 <!ELEMENT 元素名称 (元素内容)>

        类别:
            EMPTY 空标签 表示元素一定是空
            #PCDATA 普通字符串 表示元素的内容一定是普通字符串(不能含有子标
            签)
            ANY 任何类型 表示元素的内容是可以任意内容(包括子标签)

        元素内容:
            顺序问题
                <!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>: 
                按顺序出现子标签
            次数问题:
                标签   :  必须且只出现1次。
                标签+  : 至少出现1次
                标签*   : 0或n次。
                标签?  : 0 或1次。


    约束属性
        <!ATTLIST 元素名称 属性名称 属性类型 默认值>

        默认值:
            #REQUIRED 属性值是必需的 
            #IMPLIED   属性不是必需的 
            #FIXED value 属性不是必须的,但属性值是固定的

        属性类型:控制属性值的
            CDATA :表示普通字符串 
            (en1|en2|..): 表示一定是任选其中的一个值
            ID:表示在一个xml文档中该属性值必须唯一。值不能以数字开头

Schema约束

名称空间:告诉xml文档的哪个元素被哪个schema文档约束。 在一个xml文档中,不同
的标签可以受到不同的schema文档的约束。

    1)一个名称空间受到schema文档约束的情况
    2)多个名称空间受到多个schema文档约束的情况
    3)默认名称空间的情况
    4)没有名称空间的情况

Schema约束


版权声明:本文为博主原创文章,转载请注明出处KidSea

小额赞助,鼓励作者写出更好的文章