JavaEE学习笔记--XML

来源:互联网 发布:linux 查看sftp端口 编辑:程序博客网 时间:2024/06/05 06:25

Xml基本介绍

问题:什么是xml,它的作用是什么?

    XML 指可扩展标记语言    所谓的可扩展标记语言,简单说就是指xml文件中的标签可以任意定义。    XML 被设计用来传输和存储数据。

问题:xml它存储的是什么样数据?

    XML中存储的是有关系的数据。

Xml在实际开发中,它的真正作用?

1.  将xml做为配置文件2.  通过xml可以在不同的系统之间传递数据

Xml基本组成

首先,xml文件它的后缀名就是.xml,我们可以直接使用文本编辑器来对xml文件进行处理。
在xml文件中它有以下几部分

    1.  文档声明    2.  属性    3.  元素    4.  注释    5.  CDATA    6.  PI指令(了解一下

文档声明

它的主要作用就是说明当前文件是一个xml

文档声明有三个属性,而version encoding是常用的。还有一个属性叫做standalone它不常用。

1.  version 它是版本  它的值常用的是1.02.  encoding它的主要作用是声明当前xml文件的字符编码3.  standalone 它的作用是描述文档是否是一个独立文档        

属性
在xml文件中属性它的值必须使用引号引起来(双引号与单引号都可以)。

在实际开发中,经常会使用子标签来替换属性。<a type=”xxx”></a>可以使用子标签来替换属性<a>    <type>xx</type></a>

避免XML属性?

属性无法包含多重的值属性无法描述树结构属性不易扩展属性难以阅读和维护

元素
元素就是指标签
在xml中所有的标签必须有结束。

有开始有结束< a></ a>,如果标签没有标签体可以自关闭< a/>

格式良好的xml文件,它有且仅有一个根标签。其它所有的标签都是这个根标签的子孙元素
Xml中的元素是可以嵌套的,但是不能交叉嵌套。

关于标签名称的规范:1.  xml区分大小写 <a>  <A>这是两个标签。2.  不能以数字或”_”(下划线)开头3.  不能以xm(Xml XML)开头4.  标签中不能包含空格5.  名称中间不能包含(:)冒号

注释

在xml文件中它的注释与html中一样<!—注释内容 -->在xml文件中第一句话只能是文档声明,注释都不可以。注释不可以嵌套。

CDATA区域

CDATA区域中的内容不会被解析,而是原样展示。在xml中也存在一些特殊字符.&lt;   <&gt;   >

Xml语法规则总结

1.  所有的 xml标签必须关闭2.  xml标签对大小写敏感3.  xml标签必须正确嵌套4.  xml文档有且只有一个根元素5.  xml属性必加引号引起。6.  xml中的空格会被保留,对于特殊的字符必须转义才可以使用

Xml约束介绍

在xml技术中,我们可以编写一个文档来约束一个xml文件的书写的内容规范,这个就称之为xml约束。

为什么使用约束?

因为xml书写太随意,在对信息进行描述时,如果没有约束,我们是不知道,xml文件如果定义信息。所以必须规定xml文件中可以写什么,也就是定义其规范,这样才可以通过xml文件进行传输信息。

在xml技术中有哪些xml约束?

1.  DTD约束文档类型定义(DTD)可定义合法的XML文档构建模块Document type  definitionDtd文件后缀名就是dtd2.  SCHEMA约束    Schema文件它就是一个xml文件,只不过它的文件后缀名是xsd.    XML Schema 是基于 XML 的 DTD 替代者。    XML Schema 描述 XML 文档的结构。    XML Schema 语言也称作 XML Schema 定义(XML SchemaDefinition,XSD)。

Xml解析概述

所谓的xml解析就是对xml文件进行读写操作。
Xml解析方式分为两种:

1.  dom    document object model 即文档对象模型,它是w3c组织推荐的解析xml的一种方式。2.  sax    simple api for xml 不是官方标准,它是xml 社区事实上的标准,几乎所有的xml解析器都支持它

dom与sax解析方式,它只一种理论,没有具体API.

Dom与sax解析方式区别:Dom:    1.  dom解析方式它是将整个xml文件载入内存,以树型结构来存储    2.  dom支持回写 可以对xml文件中内容进行crud操作    3.  如果文件内容比较大,不建议使用dom解析。    Sax    1.  相比dom,sax是一种更为轻量级解决方案    2.  采用串行读取方式,逐行读取,读取一行解析一行。    3.  编程比较复杂    4.  sax只能读取,不能对xml进行修改。Xml解析包:    Jaxp(sun标准)    Jdom    Dom4j(重点)

Jaxp解析

Java api for xml programming 是sun公司的一套操作xml的API.Jaxp很好的支持了dom与sax解析方式。Jaxp开发包是javase的一部分,它是由javax.xml  org.w3c.dom  oirg.xml.saq包及其子包组成

Dom解析

Dom是以层次结构组织的节点信息,在操作时,是一种树型结构,它们这些节点分为元素,属性,文本等。它们之间存在关系   parent   children sibling.

查询操作

1.getElementsByTagName(String name),这个方法的返回值是NodelList,在NodelList中提供两个方法

2.得到book元素的属性

3.得到book下的所有子元素

getFirstChild() getLastChild()

4对子元素进行判断
getNodeType()==Node.ELEMENT
5. 得到元素中的文本信息
getTextContent();

创建操作
在bookstore.xml文件中添加以下信息

  1. 创建元素

  2. 添加子元素

  3. 添加属性

  4. 添加文本

Dom回写操作
就是将在内存中对dom改变同步到xml文件中。
以下三步就可以完成dom回写操作
1. 得到一个TransformerFactory对象
2. 通过TransformerFactory得到一个Transformer对象
3. 通过Transformer调用transform方法完成回写

修改操作

修改属性  setAttribute(String name,String value);修改文本  setTextContent(String value);

删除操作

删除属性  removeAttribute(String name);删除子元素   removeChild(Node childNode)

获取父元素操作

getParentNode()来完成。

Sax解析

Sax是基于事件驱动的方式来对xml进行处理。Sax它只能进行读操作。它是读取一行解析一行。

Sax解析操作步骤:

  1. 得到一个SAXParseFactory解析器工厂
  2. 通过解析器工厂得到一个解析器对象SAXParse
  3. 通过解析器对象得到一个xml的读取器
  4. 解析xml文件
    package cn.itcast.sax;    import java.io.IOException;    import javax.xml.parsers.ParserConfigurationException;    import javax.xml.parsers.SAXParser;    import javax.xml.parsers.SAXParserFactory;    import org.xml.sax.Attributes;    import org.xml.sax.ContentHandler;    import org.xml.sax.Locator;    import org.xml.sax.SAXException;    import org.xml.sax.XMLReader;    import org.xml.sax.helpers.DefaultHandler;    //解析bookstore1.xml文件    public class SaxDemo {    public static void main(String[] args) throws ParserConfigurationException,            SAXException, IOException {        // 1. 得到一个SAXParseFactory解析器工厂        SAXParserFactory factory = SAXParserFactory.newInstance();        // 2. 通过解析器工厂得到一个解析器对象SAXParse        SAXParser parse = factory.newSAXParser();        // 3. 通过解析器对象得到一个xml的读取器        XMLReader xmlReader = parse.getXMLReader();        // 必须组读取器设置一个事件处理器        xmlReader.setContentHandler(new DefaultHandler() {            // 开始解析整个文档            @Override            public void startDocument() throws SAXException {                System.out.println("开始解析xml文件");            }            // 开始解析某一个元素            @Override            public void startElement(String uri, String localName,                    String qName, Attributes attributes) throws SAXException {                String element = ("<" + qName+" ");                if (attributes.getLength() > 0) { // 判断有属性                    element += attributes.getQName(0) + "="                            + attributes.getValue(0);                }                element += ">";                System.out.println(element);            }            // 开始解析文本            @Override            public void characters(char[] ch, int start, int length)                    throws SAXException {                String text = new String(ch, start, length);                if (text != null && text.trim().length() > 0) {                    System.out.println("文本信息:" + text);                }            }            // 解析元素结束            @Override            public void endElement(String uri, String localName, String qName)                    throws SAXException {                System.out.println("</" + qName + ">");            }            // 解析整个文档结束            @Override            public void endDocument() throws SAXException {                System.out.println("结束解析xml文件");            }        });        // 4. 解析xml文件        xmlReader.parse("WebRoot/bookstore1.xml");    }}