xml知识点简单总结

Xml

eXtendsible  markup language  可扩展的标记语言

Xml作用

1.保存数据

2.配置文件

3.******数据传输载体

定义xml

一个后缀名为.xml的文件

<?xml version="1.0"  encoding="utf-8" standalone="no"?>

version:解析这个.xml文档时候解析器的版本

encoding:解析器的解析方式

standalone:文档是否独立

元素定义

1.其实就是里面的标签,<>起来都叫元素,如<stu></stu>,一般成对出现。

2.文档声明下来第一个元素叫做根元素。

3.标签里面可以镶嵌标签。

4.空标签,既是开始也是结束,一般配合属性来使用。<hr/>

5.标签可以自定义

    标签命名规则: 

XML 元素必须遵循以下命名规则:

       名称可以含字母、数字以及其他的字符 
       名称不能以数字或者标点符号开始 
       名称不能以字符 “xml”(或者 XML、Xml)开始 
       名称不能包含空格 

       命名尽量简单,做到见名知义

简单元素/复杂元素

简单元素里面包含了普通文字,复杂元素里面可以嵌套其他元素

属性的定义

定义再元素里面, <元素名称  属性名称="属性的值"></元素名称>

<students>

    <student id="001">

        <name>张无忌</name>

        <age>20</age>

    </student>

</students>

xml注释

与html的注释一样 <!-- -->

******需要放在声明下方

CDATA区

*非法字符

严格地讲,在 XML 中仅有字符 "<"和"&" 是非法的。省略号、引号和大于号是合法的,但是把它们替换为实体引用是个好的习惯。 

  <   &lt;
  &   &amp

*CDATA

如果某段字符串里面有过多的字符, 并且里面包含了类似标签或者关键字的这种文字,不想让xml的解析器去解析。 那么可以使用CDATA来包装。  不过这个CDATA 一般比较少看到。 通常在服务器给客户端返回数据的时候。

    <des><![CDATA[<a href="http://www.baidu.com">点我跳转到百度</a>]]></des>

xml解析

有很多中解析方式,但是最常用的为下面两种

1.******DOM:document object model整个xml文档读取到内存中,形成树状结构。整个文档称为Document,元素为element,属性为attribute,字符内容则为文本数据text,这四个对象统称为node节点,如果xml特别大,将会造成内存溢出。可以对文档经行增删的操作

2.SAX:simple API for Xml 基于事件驱动。读取一行,解析一行。不会造成内存溢出,不可以经行增删,只能查询。

这对DOM,SAX解析方式的API

jxap

jdom

dom4j

dom4j基本用法

1.导入dom4j的包

2.引入xml文件,例如一个两个简单的学生信息

<?xml version="1.0" encoding="UTF-8"?>
<stus>
<stu>
    <name>张无忌</name>
    <age>20</age>
</stu>
<stu>
    <name>周芷若</name>
    <age>20</age>
</stu>
</stus>

3.再java中操作xml

import java.io.File;
import java.util.List;

import javax.sound.sampled.LineListener;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class MainTest01 {
    public static void main(String[] args) throws DocumentException {
        //1.创建sax读取对象
        SAXReader reader = new SAXReader();
        
        //2.读取xml文件
        Document document = reader.read(new File("src/xml/Stus.xml"));
        
        //3.//得到元素
        System.out.println(document.getName());  //得到xml文件的目录
        System.out.println(document.getRootElement().getName());  //得到根元素
        
        Element rootElement = document.getRootElement();
        
        //4.根据根元素获取下面的子元素或者子孙元素
        
        System.out.println(rootElement.element("stu").element("name").getStringValue());//得到第一个学生的姓名
        
        List<Element> elements = rootElement.elements(); //获得根元素下的所有子元素
        System.out.println(elements.size());
        
        for (Element element : elements) {
            System.out.println(element.getName());
            String name = element.element("name").getText();
            String age = element.element("age").getText();
            System.out.println("姓名:"+name+"年龄"+age);
        }
    }
    
}

dom4j的xpath用法

1.添加依赖

2.

xml中的约束

1.引入网上的DTD来约束这个xml

<!--    文档类型  根标签名字 网络上的dtd   dtd的名称   dtd的路径
       <!DOCTYPE stus PUBLIC "//UNKNOWN/" "unknown.dtd"> -->

2.引入本地的DTD

      <!-- 引入本地的DTD  : 根标签名字 引入本地的DTD  dtd的位置 -->
      <!-- <!DOCTYPE stus SYSTEM "stus.dtd"> -->

3.直接再xml中嵌入约束规则

       <!-- xml文档里面直接嵌入DTD的约束法则 -->
       <!DOCTYPE stus [
           <!ELEMENT stus (stu)>
           <!ELEMENT stu (name,age)>
           <!ELEMENT name (#PCDATA)>
           <!ELEMENT age (#PCDATA)>
       ]>

 

        <!ELEMENT stus (stu)>  : stus 下面有一个元素 stu  , 但是只有一个
        <!ELEMENT stu (name , age)>  stu下面有两个元素 name  ,age  顺序必须name-age
        <!ELEMENT name (#PCDATA)> 
        <!ELEMENT age (#PCDATA)>
        <!ATTLIST stu id CDATA #IMPLIED> stu有一个属性 文本类型, 该属性可有可无

        元素的个数:

            + 一个或多个
            *  零个或多个
            ? 零个或一个
    
        属性的类型定义 
    
            CDATA : 属性是普通文字
            ID : 属性的值必须唯一


        <!ELEMENT stu (name , age)>        按照顺序来 

        <!ELEMENT stu (name | age)>   两个中只能包含一个子元素

Schema

  其实就是一个xml , 使用xml的语法规则, xml解析器解析起来比较方便 , 是为了替代DTD 。
  但是Schema 约束文本内容比DTD的内容还要多。 所以目前也没有真正意义上的替代DTD

    <?xml version="1.0" encoding="UTF-8"?>
        <!-- xmlns:xsi : 这里必须是这样的写法,也就是这个值已经固定了。
        xmlns : 这里是名称空间,也固定了,写的是schema里面的顶部目标名称空间
        xsi:schemaLocation : 有两段: 前半段是名称空间,也是目标空间的值 , 后面是约束文档的路径。
         -->
        <teachers
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns="http://www.haiyao.xyz/teacher"
            xsi:schemaLocation="http://www.haiyao.xyz/teacher teacher.xsd"
        >
            <teacher>
                <name>zhangsan</name>
                <age>19</age>
            </teacher>
            <teacher>
                <name>lisi</name>
                <age>29</age>
            </teacher>
            <teacher>
                <name>lisi</name>
                <age>29</age>
            </teacher>
        </teachers>

命名空间的作用

一个xml如果想指定它的约束规则, 假设使用的是DTD ,那么这个xml只能指定一个DTD  ,  不能指定多个DTD 。 但是如果一个xml的约束是定义在schema里面,并且是多个schema,那么是可以的。简单的说: 一个xml 可以引用多个schema约束。 但是只能引用一个DTD约束。

名称空间的作用就是在 写元素的时候,可以指定该元素使用的是哪一套约束规则。  默认情况下 ,如果只有一套规则,那么都可以这么写

    <name>张三</name>

    <aa:name></aa:name>
    <bb:name></bb:name>

 

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值