Standard Generalized Markup Language:XML

背景

W3C :World Wilde Web Consortium 万维网联盟\W3C理事会

定义:        国际的标准化组织。

工作:        发展Web规范

Web规范:描述Web的通信协议 (HTML和XHTML) 和其他的构建模块

标记

程序性标记:描述文档显示的样式

描述性标记:描述文档文字的用途

SGML:标准通用标记语言-Standard Generalized Markup Language

即:通用标言

定义: 定义电子文档结构描述其内容的国际标准语言

基本思想:文档与样式的分离

派生: 1.XML  可扩展标记语言            数据  传输、储存

      2.HTML超文本标记语言           数据  显示

XML语言

XML :  eXtensible  Markup   Language    可扩展标记语言

一、简介

1可扩标言

定义:用于标记电子文件使其具有结构性的标记语言。

         

用途:传输数据、存储数据

         即:一个独立于软件和硬件的信息传输工具

优势:数据搜索: 提取任何位置数据

          数据显示:数据的结构和显示分离

          数据交换:解析器-(跨平台、跨操作系统、跨域的数据交互)

2数据结构:树状结构(层次结构数据模型)

3开发和应用环境

XML编译工具       

XML验证工具        MircosoftXML  Validator\MircosoftXSL  Debugger  

XML解析器            DOM4j

XML浏览工具

二、文档组成

文档构成

 

一、XML序文

1文档声明                 version规范     encoding字符编码     standalone 外部DTD

<?xml version=1.0’’>

文档类型声明     DOCTYPE

<!DOCTYPE  根元素标记名[<!—实体声明-->] > 

2文档注释 

<!—注释内容-->

3处理指令          type类型          href连接

<!—注释内容-->

 

二、文档元素

根元素: 完全包括文档中其他所有元素的元素

普通元素:

属性

元素文档树

 

文档内容

1元素TITLE

<开始标记>内容</结束标记>                  < TITLE >YIKEJI.LTD</TITLE>

元素之间的关系:子元素/父元素、祖先/后代

元素内容的关系:嵌套元素/字符数据/实体引用/CDATA节/处理指令/注释

2属性ATTRIBUTE

<元素名   属性名=”属性值”>

3实体

作用:避免重复输入

预定义实体:

自定义实体:           <!DOCTYPE 根元素

[<!ENTITY  实体名“实体内容”>]>

引用已定义的实体:       &实体名

4专用标记

1注释:         <!—注释-->

2处理指令PI :XML解析器传递信息到应用程序

语法:

样式表处理指令      

3CDATA节点:整段文本解释为纯字符数据而不是标记。

         语法:<![CDATA[<html><head></head></html>]]>

5命名空间   Namespace

命名冲突:不同文档使用同样的名称描述两个不同类型的元素。

解决冲突问题:

1使用前缀    <h:table><f:table>

2使用命名空间   <h:table  xmlns:h=“”>

                         <f:table xmlns: f=” ”>    <f:name>African  Coffee  Table</f:name>

 

三、语法规则

声明

元素:

元素:XML的标签    包括:开始标签+结束标签

书写: 包含标签体\不含标签体

说明: 1个根标签

2空格和换行

命名规范:

可以含字母、数字以及其他的字符
不能以数字或者标点符号开始

不能以字符 “xml”(或者 XMLXml)开始

不能包含空格

 

 

 

 

 

 

四、解析

1解析方式     DOM\SAX\JDOM\DOM4J

1DOM解析:DOM4J(DOM For Java)实现DOM解析

2SAX解析:   pull解析和Sax类似

 

2区别

DOM解析(Document Object Model)     文档对象模型

      所有的XML文档信息存于内存中,      创建DOM树

      效率低、解析慢

内存消耗大、支持增删改查、

SAX解析(Simple API for XML)

      用与处理XML事件驱动的“推”模型

      效率高、解析快

      内存消耗小、只适合读取、

 

 

6.1 DOM4J解析

Dom4j :是一个为Java服务的XML框架。

          可以对XML文档读写、操作、创建和修改,集成了DOM和SAX,同样支持xPath

 

1获取Document对象

SAXReader reader = new SAXReader();
Document  document= reader.read(new File("input.xml"));

2节点对象操作

1.获取根节点.    Element root = document.getRootElement();
2.取得元素  .    Element element=node.element(“书名");
3.取得文字       String text=node.getText();
4.取得子节点,遍历.
        List nodes = rootElm.elements(“book");
        for (Iterator it = nodes.iterator(); it.hasNext();) {
            Element elm = (Element) it.next();
            do something}

节点属性操作

1.获取根节点       Element root=document.getRootElement();   
  设置属性        Attribute attribute=root.attribute("size");
2.属性文字        String text=attribute.getText();
3.属性删除        Attribute attribute=root.attribute("size");
               root.remove(attribute)

DOM4J

内容

1接口

Document接口: XML文档

Element接口:     XML元素

Attribute接口:    XML元素的属性节点

Text文本节点

Branch             为所有节点定义的公共行为

NodeL节点:    属性节点、文本节点等

2工具类

DocumentHelper:

OutputFormat

XMLWriter

SAXReader

 

操作

生成文档

第一步:在内存中生成一个XML文档的Document

第二步:将Document输出到文件

解析文档

SAXReader reader=new SAXReader();

Document  doc=

             read.read(getClass().getResourceAsStream(“/com/qfedu/dom4j/book.xml”))

Element  root=doc.getRootElement();

 

For()

 

案例1 读取

1创建SaxReader          SAXReader reader = new SAXReader();

2获取Document对象   Document document = reader.reader(new FileReader(“src\\book.xml”));

3获取根节点                Element root = document.getRootElement();

4获取book集合           List<Element> bookList=root.elements(“book”);

        for(Element b:bookList){

5获取属性

            String id=b.attributeValue("id");
      String name=b.element("name").getText();
      String author=b.element("author").getText();
      String price=b.elementText("price");

Book book=new Book(Integer.parseInt(id), name, author,Double.parseDouble(price));
            System.out.println(book.toString());
            }

}

 


public static void readxml() throws Exception{
        //1创建SaxReader
        SAXReader reader=new SAXReader();
        //2获取Document对象
        Document document=reader.read(new FileReader("src\\books2.xml"));
        //3获取根节点
        Element root=document.getRootElement();//books
        //System.out.println(root.getName());
        //4获取book集合
        List<Element> bookList=root.elements("book");
        for (Element b : bookList) {
            //System.out.println(b.getName());
            //5获取属性
            String id=b.attributeValue("id");
            String name=b.element("name").getText();
            String author=b.element("author").getText();
            String price=b.elementText("price");
            Book book=new Book(Integer.parseInt(id), name, author, Double.parseDouble(price));
            System.out.println(book.toString());
        }
    }

 

 

案例2 写入

1创建SaxReader :SAXReader  reader = new SAXReader();

2读取文件 :        Document  document = reader.read(FileReader(“src\\book.xml”));

3获取根节点:     Element root = document.getRootElement();

4添加元素         Element newbook = root.addElement(“book”);

5添加属性         newbook.addAttribute(“id”,”1003”);

6 添加子元素

        newbook.addElement("name").setText("android开发");;
        newbook.addElement("author").setText("老张");;
        newbook.addElement("price").setText("88.8");;

7写入文件     OutputFormat format=OutputFormat.createPrettyPrint();

设置编码格式  format.setEncoding("utf-8");

创建写入流   XMLWriter writer=new XMLWriter(

new FileWriter("src\\books2.xml"), format);
写入文件     writer.write(document);

关闭写入流   writer.close();

 

//2写入xml文件
     public static void writeXml() throws Exception{
        //1 创建SaxReader
        SAXReader reader=new SAXReader();
        //2读取
        Document document=reader.read(new FileReader("src\\books2.xml"));
        //3获取根节点
        Element root = document.getRootElement();
        //4添加节点
        Element newbook = root.addElement("book");
        //5添加属性
        newbook.addAttribute("id","1003");
        //6newbook添加name author price
        newbook.addElement("name").setText("android开发");;
        newbook.addElement("author").setText("老张");;
        newbook.addElement("price").setText("88.8"); 

     //7写入文件中
        OutputFormat format=OutputFormat.createPrettyPrint();//创建一个漂亮的输出格式
        format.setEncoding("utf-8");
        XMLWriter writer=new XMLWriter(new FileWriter("src\\books2.xml"), format);
        writer.write(document);
        writer.close();
        System.out.println("写入成功");
    }

 

案例3   修改和删除

1创建Xml       SAXReader reader = new SAXReader();

2读取文档     Document document = reader.read(new FileReader(“src\\book.xml”));

3获取根节点   Element root = document.getRootElement():

4获取元素      List<Element> elements = root.elements(“book”);

                     Element  bookElement = elements.get(2);

                     bookEle.element(“name”).setText(“新书名”);

5删除            Element  delEle= elements.get(0);

            root.remove(delEle);

6写入            OutputFormat  format = Output.createPrettyPrint();

设置编码格式  Format.setEncoding(“utf-8”);

创建写入流   XMLWriter writer=new XMLWriter(

new FileWriter("src\\books2.xml"), format);

写入文件    writer.write(document);
关闭写入流   writer.close();

 

 

  public static void updateXml() throws Exception{
        //1创建Xmlreader
        SAXReader reader=new SAXReader();
        //2文档
        Document document = reader.read(new FileReader("src\\books2.xml"));
        //3获取根节点
        Element root = document.getRootElement();
        //4获取id=1003book
        List<Element> elements = root.elements("book");
        Element bookEle = elements.get(2);
        bookEle.element("name").setText("android从入门到大神");
        Element first =elements.get(0);
        //5删除
        root.remove(first);
        //6写入
        OutputFormat format=OutputFormat.createPrettyPrint();
        format.setEncoding("utf-8");
        XMLWriter writer=new XMLWriter(new FileWriter("src\\books2.xml"), format);
        writer.write(document);
        writer.close();
        System.out.println("修改删除完毕");
    }

猜你喜欢

转载自blog.csdn.net/ddhmbbklyk2018/article/details/81568959
今日推荐