Javaweb学习笔记 xml篇

1.什么是xml?
xml是可拓展的标记性语言

2.xml的作用?
xml的主要作用有:
1.用来保存数据,而且这些数据具有自我描述性
2.它还可以作为项目或者模块的配置文件
3.还可以作为网络传输数据的格式(现在以JSON为主)

Student{id = 1 name = "张三"}
Student{id = 2 name = "李四"}

students.xml
<students>
<student>
<id>1id>
<name>张三name>
student>
<student>
<id>2id>
<name>李四name>
student>
students>

3.xml语法:
·文档声明
·元素(标签)
·xml属性
·xml注释
·文本区域(CDATA区)

3.1 我的第一个xml文件



<books> 
 <book sn="sn123456"> 
     <name>时间简史name> 
     <author>霍金author> 
     <price>5price>  
 book>
    <book sn="sn12345"> 
        <name>java从入门到放弃name> 
        <author>张三author> 
        <price>9price>  
    book>
books>

3.2xml注释:
xml的注释和html一样 都是

3.3元素 (标签)
咱们先回忆一下:
html标签:
格式:<标签名>封装的数据
单标签:<标签名/> < br/>换行 < hr/>水平线
双标签:<标签名>封装的数据
标签名大小写不敏感
标签有属性,有基本属性和事件属性
标签要闭合(不闭合不会报错,但我们要养成良好的书写习惯)

1.什么是xml 元素?
XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。
元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。

<bookstore>
<book category="CHILDREN">
  <title>Harry Pottertitle> 
  <author>J K. Rowlingauthor> 
  <year>2005year> 
  <price>29.99price> 
book>
<book category="WEB">
  <title>Learning XMLtitle> 
  <author>Erik T. Rayauthor> 
  <year>2003year> 
  <price>39.95price> 
book>
bookstore> 

在上例中, 和 都拥有元素内容,因为它们包含了其他元素。 只有文本内容,因为它仅包含文本。
在上例中,只有 元素拥有属性 (category=“CHILDREN”)。

2.xml的命名规则
xml元素必须遵循以下命名规则:
2.1 名称可以含有字母,数字以及其他的字符
2.2 名称不能以数字或者标点符号开始
2.3 名称不能以字符"span"(或者xml ,xml) 开始 (他是可以的)
2.4 名称不能包含空格

3.xml中的元素(标签)也分成 单标签和双标签
单标签
格式: <标签名 属性=”值” 属性=”值” … />
双标签
格式:< 标签名 属性=”值” 属性=”值” …>文本数据或子标签

3.4xml属性
xml的标签属性与html的标签属性是非常类似的,属性可以提供元素的额外信息

在标签上可以书写属性:
一个标签上可以书写多个属性,每个属性的值必须使用引号来引起来
的规则和标签的书写规则一致

3.5语法规则:
3.5.1) 所有xml元素都须有关闭标签 (也就是闭合)
3.5.2)xml标签对大小写敏感

3.5.3)xml必须正确的嵌套
3.5.4)xml文档必须有根元素
根元素就是顶级元素
没有父标签的元素 就是顶级元素
根元素是没有父标签的顶级元素 而且是唯一一个才行
3.5.5)xml的属性值须加引号
3.5.6)xml中的特殊字符 用 …等等等
3.5.7)文本区域(CDATA 区)
CDATA 语法可以告诉 xml 解析器,我 CDATA 里的文本内容,只是纯文本,不需要 xml 语法解析
CDATA 格式:



<books> 
 <book sn="sn123456"> 
     <name>时间简史name> 
     <author>霍金author> 
     <price>5price>  
 book>
    <book sn="sn12345"> 
        <name>java从入门到放弃name> 
        <author>张三author> 
      <price>9price>  
        
book>
books>

2.xml解析技术介绍
xml可拓展的标记语言
不管是html文件还是xml文件他们都是标记性文档,都可以使用w3c组织指定的dom技术来解析
document对象表示的是整个文档 (可以是html文档,也可以是xml文档)

早期jdk为我们提供了两种xml解析技术dom与sax简介 (已过时,但是我们需要知道这两项技术)
dom 解析技术是 W3C 组织制定的,而所有的编程语言都对这个解析技术使用了自己语言的特点进行实现。
Java 对 dom 技术解析标记也做了实现。
sun 公司在 JDK5 版本对 dom 解析技术进行升级:SAX( Simple API for XML )
SAX 解析,它跟 W3C 制定的解析不太一样。它是以类似事件机制通过回调告诉用户当前正在解析的内容。
它是一行一行的读取 xml 文件进行解析的。不会创建大量的 dom 对象。
所以它在解析 xml 的时候,在内存的使用上。和性能上。都优于 Dom 解析。
第三方的解析:
jdom 在 dom 基础上进行了封装 、
dom4j 又对 jdom 进行了封装。
pull 主要用在 Android 手机开发,是在跟 sax 非常类似都是事件机制解析 xml 文件。

这个 Dom4j 它是第三方的解析技术。我们需要使用第三方给我们提供好的类库才可以解析 xml 文件

3.dom4j解析技术
由于dom4j他不是sun公司的技术 而是第三方公司的技术 我们需要使用dom4j就需要到dom4j的官网下载dom4j的jar包
3.1 dom4j类库的使用
解压压缩包

3.2dom4j目录的介绍
1)docs是文档目录
2)如何查dom4j的文档
3)Dom4j快速入门
4)lib目录
5)src目录是第三方类库的源码目录

3.3dom4j编程步骤
第一步 先加载xml文件创建Document对象
第二步 通过Document对象拿到根元素对象
第三步 通过根元素.elelemts(标签名)可以返回一个集合 这个集合里放着 所有你指定的标签名的元素对象
第四步 找到你想要修改 删除的子元素 进行相应的操作
第五步 保存到磁盘上

3.4获取document对象
创建一个lib目录,并添加dom4j的jar包 并添加到类路径

package com.atguigu.pojo;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
import org.junit.Test;



public class Dom4jTest {
    @Test
public void test1() throws DocumentException {
        //创建一个saxreader输入流,去读取xml配置文件,生成document对象
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read("src/books.xml");

        System.out.println(document);
    }
}

打印结果:org.dom4j.tree.DefaultDocument@5db250b4 [Document: name src/books.xml]

book.java

package com.atguigu.pojo;



public class Book {
 private String sn;
 private String name;
 private String price;
 private String author;

    public String getSn() {
        return sn;
    }

    public void setSn(String sn) {
        this.sn = sn;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPrice() {
        return price;
    }

    public void setPrice(String price) {
        this.price = price;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public Book() {
    }

    public Book(String sn, String name, String price, String author) {
        this.sn = sn;
        this.name = name;
        this.price = price;
        this.author = author;
    }

    @Override
    public String   toString() {
        return "Book{" +
                "sn='" + sn + '\'' +
                ", name='" + name + '\'' +
                ", price=" + price +
                ", author='" + author + '\'' +
                '}';
    }
}

Dom5jDemo

package com.atguigu.pojo;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;

import java.util.List;


public class Dom4jTest {
    @Test
public void test1() throws DocumentException {
        //创建一个saxreader输入流,去读取xml配置文件,生成document对象
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read("src/books.xml");

        System.out.println(document);
    }
    //读取book.xml 文件生成book类
    @Test
 public void test2() throws DocumentException {
        //1.读取books.xml文件
        SAXReader reader = new SAXReader();
        //在junit测试中,相对路径是从模块名开始算
        Document document = reader.read("src/books.xml");
        //2.通过document对象获取根元素
        Element rootElement = document.getRootElement();
        System.out.println(rootElement);
        //3.通过根元素获取book标签对象
        // element()与elements() 都是通过标签名查找子元素
        List<Element> books = rootElement.elements("book");
        //4.遍历,处理每个book标签转换转坏为book类
        for(Element book : books){
            //asXML() 把标签对象,转换为标签字符串
//            System.out.println(book.asXML());
            Element nameElement = book.element("name");
//            System.out.println(nameElement.asXML());
            /*java 编程思想
             葵花宝典
            * */
            String nameText = nameElement.getText();
            System.out.println(nameText);
            /*
            * java 编程思想
              葵花宝典
            * */
           //直接获取标签名下文本内容
            String price = book.elementText("price");
            System.out.println(price);
            /*
            *9.9
            *5.5
             */
            String name = book.elementText("name");

            String author = book.elementText("author");
            System.out.println(author);
        //打印属性值
            String id = book.attributeValue("id");
            System.out.println(id);

            System.out.println(new Book(id,name,price,author));

        }



    }
}

xml文件:



<books> 
    <book id="SN123123413241"> 
        <name> java 编程思想name> 
        <author>华仔author> 
        <price>9.9price> 
    book>
    <book id="SN12341235123"> 
        <name>葵花宝典name> 
        <author>班长author> 
        <price>5.5price>
    book>
books>

你可能感兴趣的:(学习笔记,xml)