xml学习笔记

一、XML入门

HTML:负责网页的结构

CSS:负责网页的样式(美观)

JavaScript:负责在浏览器端与用户进行交互

HTML语言特点:(1)由标签组成;(2)语法结构松散,不区分大小写,结束标签和开始标签不一定匹配。

HTML与XML的区别:

(1)      HTML(HyperTextMarkup Language)超文本标记语言,由标签组成,标签是由w3c组织制定,固定的;作用是负责网页结构的。

(2)      XML(ExtendMarkup language)可扩展标签语言,标签由开发者按照一定的语法定义自己制定的,作用是描述带关系的数据(作为软件的配置文件)和作为数据的载体(存储数据,小型的”数据库”)

二、XML语法:

xml文件以xml后缀名结尾。

xml文件需要使用xml解析器去解析。浏览器内置了xml解析器

三、标签

3.1语法:

<student></student>开始标签 标签体内容 结束标签

    (1)<student/>或<student><student/>空标签。没有标签体内容

    (2)xml标签名称区分大小写

    (3)xml标签一定要正确配对

    (4)xml标签名中间不能使用空格

    (5)xml标签名不能以数字开头

    (6)注意:在一个xml文档中,有且仅有一个根标签

3.2属性

     语法:<Studentname=”eric”>student</Student>

注意:

(1)    属性值必须以引号包含,不能省略,也不能单双引号混用!!!

(2)    一个标签内可以有多个属性,但不能出现重复的属性名!!!

   3.3注释

语法:<!--注释的内容 -->

   3.4文档声明

语法:<?xmlversion=”1.0” encoding=”utf-8”?>

version:xml的版本号

encoding:解析xml文件时查询的码表(解码过程时查询的码表)

注意:

如果在ecplise工具中开发xml文件,保存xml文件时自动按照文档声明的encoding来保存文档

  3.5转义字符

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

特殊字符                   转义字符

<                                   &lt;

>                   &gt;

“                                   &quot;

&                                  &amp;

空格                            &nbsp;

3.6 CDATA块

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

  <![CDATA[

              <html><head>head</head><body>body</body></html>

     ]]>

3.7处理指令

  作用:告诉xml解析器如何解析xml文档

  案例:<?xml-stylesheettype=”text/css” href=”1.css”?>告诉xml解析器该xml文档引用了哪个css文件

需要提取xml内容可以使用xml-stylesheet指令

四、xml解析

4.1 引入

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

4.2 xml解析方式(原理不同)

         DOM解析

         SAX解析

4.3 xml解析工具

         DOM解析原理:

                   (1)JAXP              (oracle-Sun公司官方)

                   (2)JDOM工具(非官方)

                   (3)Dom4J工具(非官方)

                            三大框架(默认读取xml的工具就是Dom4J)

         SAX解析原理:

(1)    SAX解析工具(oracle-Sun公司官方)

/*

BOM(浏览器对象编程)

DOM(文档对象编程)JavaScript引擎把html文件中标签封装成各种对象

*/

xml解析器在解析xml文档时,把xml文件的各个部分内容封装成对象,通过这些对象操作xml文档,这种做法叫做DOM解析(DOM编程)

Dom解析:

         Document对象,代表一个完整的xml文档

         通过Document对象可以得到其下面的其他节点对象,通过节点对象访问xml文档的内容。(标签,属性,文本,注释…)

4.4什么是DOM解析

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

4.5 Dom4J工具

         非官方,不在JDK内

         使用步骤:

(1)      导入dom4j的核心包 dom4j-1.6.1.jar

(2)      编写Dom4J读取xml文件代码


	public static void main(String[] args) {
		try {
			//1、创建一个xml解析器对象
			SAXReader reader = new SAXReader();
			//2、读取xml文档,返回Document对象
			Document document = reader.read(new File("./src/contact.xml"));
			System.out.println(document);
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			throw new RuntimeException(e);
		}
	}

4.6Dom4j读取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();//获取属性名称

                            Attribute.getValue();//获取属性值

                   List<Attribute>Element.attributes();//获取所有属性对象

                   Iterator<Attribute>  Element.attributeIterator();//获取所有属性对象

         文本:

           Element.getText();//获取当前标签的文本

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

五、总结:

5.1 xml作用

a)        作为软件配置文件(最常见)

b)        作为小型的”数据库”

5.2  xml语法(由w3c组织规定的)

标签:

  标签名不能以数字开头,中间不能由空格,区分大小写,有且仅有一个根标签

属性:

  可以有多个属性,但是属性值必须用引号(单引号或双引号)包含,但不能省略,也不能单双混用

文档声明:

  <?xmlversion=”1.0” encoding=”utf-8”?>

  Encoding=”utf-8”: 打开或解析xml文档时的编码

注意:

  保存xml文档时的编码和解析xml文档时的编码要保持一致,才能避免中文乱码问题!

5.3 xml解析(DOM解析)

程序读取或操作xml文档

两种解析方式:DOM解析    VS    SAX解析

DOM解析原理:一次性把xml文档加载成Document树,通过Document对象得到节点对象,通过节点对象访问xml文档内容(标签,属性,文本,注释)。

5.4 Dom4j工具(基于DOM解析原理):

  读取xml文档:

    Document doc =new SAXReader().read(“xml文档”);

  节点:

nodeIterator();          //所有节点

         标签:

           Element(“名称”);              //指定名称的第一个子标签对象

                       elementIterator(“名称”);        //指定名称的所有子标签对象

                            elements();                         //所有子标签对象

                     属性:

                            attributeValue(“名称”);           //指定名称的属性值

                            attribute(“名称”);                      //指定名称的属性对象

                                     getName()                          //属性名称

                                     getValue()                           //属性值

                            attributeIterator()                     //所有属性对象(Iterator)

                            attributes()                                  //所有属性对象(List)

                     文本:

                            getText()                                       //得到文本

                            elementText(“子标签名称”) //得到字标签的文本

day0709

六、Dom4j修改xml文档

    XMLWriterwriter = new XMLWriter(OutputStream,OutputFormat);

  Writer.write(Document);

6.1修改xml文档的API

     增加:

DocumentHelper.createDocument();                 //增加文档

addElement(“名称”);                                              //增加标签

addAttribute(“名称”,”值”);                                   //增加属性

    修改:

Attribute.setValue(“值”);                                //修改属性值

Element.addAttribute(“同名的属性名”,”值”);//修改同名的属性值

Element.setText(“内容”);                               //修改文本内容

    删除:

Element.detach();                           //删除标签

Attribute.detach();                           //删除属性

 

七、xPath技术

7.1引入:

      当使用Dom4j查询比较深的层次结构的节点(标签,属性,文本),比较麻烦

7.2 xPath作用

      主要用于快速获取所需的节点对象

7.3在dom4j中如何使用xPath技术

(1)导如xPath支持jar包。Jaxen-1.1-beta-6.jar

(2)使用xPath方法

List<Node> selectNodes(“xPath的表达式”);                      //查询多个节点对象

Node    selectSingleNode(“xPath的表达式”);                       //查询一个节点对象

7.3 xPath语法

    /                          绝对路径         表示从xml的根位置开始或子元素(一个层次结构)

  //                           相对路径         表示不分任何层次结构的选择元素

   *            通配符              表示匹配所有元素

   []           条件                  表示选择什么条件下的元素

   @                          属性                   表示选择属性节点

   and         关系                   表示条件的与关系(等价于&&)

   text()               文本                   表示选择文本内容

案例:

  用户登录功能:

用户输入用户名和密码--à到”数据库”查询是否有对应的用户--à

  有:则表示登录成功

  没有:则表示登录失败

  用xml当做数据库

user.xml    用来存储用户的数据

八、SAX解析

   8.1 引入

DOM解析原理:一次性把xml文档加载进内存中,然后在内存中构建Document树。对内存要求比较高

缺点:不适合去读取一些大容量的文件,容易导致内存溢出。

  SAX解析原理:加载一点,读取一点,处理一点,对内存的要求比较低。

8.2 SAX解析工具:

     SAX解析工具:Sun公司提供的,内置在jdk中。org.xml.sax.*

       核心的API:

SAXParse类:用于读取和解析xml文件

     parse(Filef,DefaultHandler dh);//方法,解析xml文件

       参数一:File:表示读取的xml文件

       参数二:DefaultHandler:SAX事件处理程序。使用DefaultHandler的子类

      DefaultHandler类的API:

void startDocument() : 在读到文档开始时调用

void endDocument() : 在读到文档结束时调用

void startElement(String uri,String localName,StringqName,Attributes attributes)  :  读到开始标签时调用。

void endElement(String uri,String localName,String qName)  :  读到结束标签时调用

void characters(char[] ch,int start,int length)  :   读到文本内容时调用

DOM解析    VS    SAX解析

区别一:

DOM解析原理:一次性加载xml文档,不适合大容量的文件读取

SAX解析原理:加载一点,读取一点,处理一旦,适合大容量文档的读取

区别二:
DOM解析可以任意进行增删改查

SAX解析只能读取

区别三:

DOM解析任意读取任何位置的数据,甚至往回读

SAX解析只能从上往下,按顺序读取,不能往回走

区别四:

DOM解析面向对象的编程方式(Node,Element,Attribute)Java开发者编码比较简单

SAX解析基于事件的编程方法。Java开发者比较难理解

 

九、总结:

9.1 Dom4j修改xml文档

写出xml文档

XMLWriter writer = new XMLWriter();

Writer.write(doc); //写出xml文档

      增加:

       DocumentHelper.createDocument();               //增加新文档

             Element.addElement(“name”);                          //增加子标签

       Element.addAttribute(“name”,”value”)           //增加属性

      修改:

       Attribute.setValue(“value”);                               //修改属性值

             Element.setText(“value”);                                            //修改文本内容

           删除:

             Element.detach();                                                  //删除标签

             Attribute.detach();                                                //删除属性

9.2  xPath技术:快速找到xml(标签,属性,文本)

dom4j使用xpath:

    List<node>list = Element.selectNodes(“xpath表达式”);   //多个节点对象

    Nodenode = Element.selectSingleNode(“xpath表达式”); //一个节点对象

9.3 xpath表达式语言

   /                                      表示根位置或者 子标签

   //                                    表示后代标签(部分层次结构)

   *                表示所有元素

   []                表示条件

   @                表示选择属性

   text()             表示选择文本

   and              表示与条件

9.3  SAX解析:原理:加载一点,解析一旦,处理一点,对内存要求不高(基于事件)

SAXParser类:

  parser(Filefile,DefaultHandler handler): 该方法使用SAX解析方式去解析xml文档

DefaultHandler类:重写该类中的一些方法,用于处理xml文档

  startElement(…String qName);    //读到开始标签时调用

characters(char[] ch, int start,intlength);    读到文本内容时调用(包括空格和换行)

  endElement(….String qName);    //读到结束标签时调用

十、xml约束

    xml约束要求:大家能够看懂约束内容,根据约束内容写出符合规则的xml文件

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

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

10.1 xml约束技术:

    DTD约束:语法相对简单,功能相对简单。学习成本低

    Schema约束:语法相对复杂,功能也相对强大。学习成本相对高。(语法空间)

10.2 DTD约束:

导入dtd方式

内部导入

<!DOCTYPE note [

    <!ELEMENTnote (to,from,heading,body)>

    <!ELEMENT to        (#PCDATA)>

  <!ELEMENT from      (#PCDATA)>
        <!ELEMENT heading    (#PCDATA)>

    <!ELEMENTbody      (#PCDATA)>

]> 

外部导入

   本地文件系统:

     <!DOCTYPE note SYSTEM “note.dtd”>

   公共的外部导入:

     <!DOCTYPE 根元素 PBULIC http://gz.itcast.cn/itcast.dtd>

DTD语法

  约束标签

    <!ELEMENT 元素名称 类别> 或 <!ELEMENT元素名称 (元素内容)>

  类别:

    空标签:EMPTY 表示元素一定是空标签

    普通字符串:(#PCDATA)。表示元素的内容一定是普通字符串(不能含有子标签)

    任何内容:ANY。 表示元素的内容可以是任意内容

  (元素内容):

    顺序问题:

      <!ELEMENT 元素名称(子元素名称1,子元素名称2,……)> :按顺序出现子标签

    次数问题:

      标签:必须且只出现1次

      标签+:至少出现一次

      标签*:0或n次

      标签?:0或1次

  约束属性

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

      默认值:

#REQUIRED        属性是必需的

        #IMPLIED          属性不是必需的

        #FIXEDvalue       属性不是必需的,但属性值是固定的

      属性类型:控制属性值

        CDATA :表示普通的字符串

        (en1|en2|…):表示一定是任选其中的一个值

        ID:  表示在一个xml文档中该属性值必须唯一,值不能以数字开头

  10.3 XML Schema 也是一种用于定义和描述xml文档结构与内容的模式语言,其出现是为了克服DTD的局限性

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

1、  一个名称空间受到schema文档约束的情况

2、  多个名称空间受到多个schema文档约束的情况

3、  默认名称空间的情况

4、  没有名称空间的情况


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值