XML、DTD、XPATH要点总结

1、什么是xml(xtendsible markup language可扩展的标记语言)?
    1)定义
        基于文本的通用的数据保存格式。
        (1)通用的
            点的坐标
                Point类  point对象(x=10,y=20)
                a,序列化
                b,数据库表
                c,文件  
                ...
        (2)数据格式
                <point>
                    <x>10</x>
                    <y>20</y>
                </point>       
2、xml的基本语法
    1)元素
        (1)什么是元素?
            开始标记、结束标记以及标记之间的内容统称为元素。
        (2)元素有哪些特点
            a,每个xml文档必须有唯一的一个根元素。
            b,元素可以嵌套。
            c,元素有开始标记和结束标记,如果
            一个元素没有内容,称之为空元素。
                比如:
                    <order></order>
                空元素也可以简写为
                    <order/>
    2)属性
        (1)什么是属性?
            用来描述元素的特性
        (2)属性的特点
            a,属性必须有属性名称和属性值,属性值必须用引号(单引号双引号都可以)括起来。
            比如:
                <point type="a" class="b">
                </point>
            b,属性必须放在开始标记里面。
            c,可以有多个属性,多个属性用空格隔开。
    3)实体引用
        (1)什么是实体引用
            xml文档里面,有一些特殊的字符,比如<,>等等,如果要表示其原始的含义,必须用相应的转义字符序列来表示。
            <     &lt;
            >     &gt;
            &        &amp;
            '     &apos;
            "     &quot;
    4)xml声明        
        <?xml version="1.0" encoding="utf-8"?>
        version:设置xml的版本。
        encoding: xml文档的编码。
        每一个xml文档,都必须先添加xml声明。
    5)CDATA    
        告诉解析器,CDATA包含的数据不要去解析。
        比如:
            <![CDATA[   1<2 & 2>3     ]]>
    6)大小写敏感
        <point></Point>   error!
        习惯用小写,如果有多个单词组成一个标记,建议用"-"连接。比如
            java : studentName
            xml  : <student-name>
3、xml解析 
        1)常见的解析方式
            a, DOM(Document Object Model): 将一个xml文档先读取完毕,然后在内存当中生成一棵完整的dom树。这种方式的缺点是会占用过多的内存。
            b, SAX(Simple Api for Xml):基于事件,当解析器读取到开始标记、内容、结束标记会产生相应的事件。通过监听这些事件编写相应的程序。缺点一个是编程相对比较复杂,另外,只能读不能写。SAX对内存空间占用比较小,所以,当对内存空间有限制的场合下需要解析xml时,可以使用SAX。
            c, 不使用官方提供的DOM和SAX,而是使用一些开源的组件,比如DOM4j,Pull。
        2)将一个java对象转换成一个对应的xml文档
            (1)思想
                step1,先设计好xml文档的结构类对应一个元素,比如Point类对应point元素。 类的属性可以对应一个子元素或者元素的属性。如果类的属性是基本类型,对应子元素或者元素的属性均可,如果类的属性是一个复杂类型,则对应子元素。比如,Student类有一个属性Address,则应该
                    <student>
                            <address>
                            <city></city>
                            <street></street>
                        </address>
                    </student>
                step2,在内存当中,构造相应的dom树
                step3,输出
        3)将一个xml文档转换成一个对应的java对象
            (1)思想
                step1, 将xml文档转换成一个dom树。
                step2, 读取dom树节点的值。
4、xml设计
    (1)xml设计的含义
        定义xml文档的结构(有哪些元素,元素包含哪些
属性,元素的出现的顺序、次数等等)。
    (2)如何设计
        1)DTD文档
            <!DOCTYPE orders[
                <!ELEMENT orders (order+)>
                <!ELEMENT order (name,flight,time,dest)>
                <!ELEMENT name (#PCDATA)>
                <!ELEMENT flight (#PCDATA)>
                <!ELEMENT time (#PCDATA)>
                <!ELEMENT dest (#PCDATA)>
                <!ATTLIST  order type CDATA #REQUIRED>

        ]>

      

        2)schema文档
            类似于dtd文档,也是用来定义xml文档的结构的。只不过,schema使用了xml的语法,并且,比dtd更灵活,能够表示更复杂的数据类型,并且支持命名空间。

        3)示例

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE orders[
<!ELEMENT orders (order+)>
<!ELEMENT order (name,flight,time,dest)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT flight (#PCDATA)>
<!ELEMENT time (#PCDATA)>
<!ELEMENT dest (#PCDATA)>
<!ATTLIST  order type CDATA #REQUIRED>
]>
<orders>
	<order type="vip">
		<name>过儿</name>
		<flight>mu1748</flight>
		<time>8:00</time>
		<dest>绝情谷</dest>
	</order>

</orders>		


5、xpath
    (1)xpath是什么?
        类似于使用sql语句查询数据库,xpath语句可以用来查询xml文档。
    (2)如何使用xpath?
        step1,构造dom树。
        比如:
            SAXReader reader = new SAXReader();
        Document doc = reader.read(ips);
        step2,调用doc的selectNodes方法,该方法里面填写 xpath语句即可。
        比如:
            doc.selectNodes("/orders/order/time");
        典型的xpath语句
            1)从根节点开始查询
            比如:
                doc.selectNodes("/orders/order/time");
            2)以索引的方式查询
            比如:
                doc.selectNodes("/orders/order[1]/time");
            3)依据属性值进行查询
            比如:
                doc.selectNodes("/orders/order[@type='vip']/time");
            4)任意查询(不从根节点开始)
            比如:
                doc.selectNodes("//name");
            5)依据子节点的值进行查询
            比如:
                doc.selectNodes("/orders/order[flight='ca1008']/dest");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值