2XML

XML

1简介

​ 什么是xml

  • xml是可扩展的标记性语言

​ xml的作用

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

2xml语法

​ 2.1文档声明

<!--  我们先创建一个book.xml文件     -->
<?xml version="1.0" encoding="utf-8" ?>
<!--声明 version表示版本 encoding表示xml文件本身的编码  -->

<books>
    <book sn="100">
        <name>时间简史</name>
        <author>霍金</author>
        <price>75</price>
    </book>

    <book sn="101">
        <name>java</name>
        <author>范老师</author>
        <price>9.9</price>
    </book>

    <book sn="102" name="辟邪剑谱" author="lala" price="999" />
</books>

​ 2. 2元素

  • xml元素指的是从(且包括)开始标签到(且包括)结束标签的部分,我们可以简单理解为标签
  • 命名规则
  • 名称可以含字母,数字以及其他的字符
  • 名称不能以数据或者标点符号开始
  • 名称不能包含空格
  • 元素也分为单标签和双标签

​ 2.3属性

  • xml的标签属性和html的标签属性是非常类似的,属性可以提供元素的额外信息
  • 在标签上可以书写属性,一个标签上可以书写多个属性,每个属性的值必须使用引号引进来

​ 2.4语法规则

  • 所有xml元素都必须有关闭标签
  • xml标签对大小写敏感
  • xml必须正确地嵌套
  • xml文档必须有且仅有一个根元素,根元素就是顶级元素,没有父标签的元素叫顶级元素
  • xml中的特殊字符:<特殊字符:lt >特殊字符:&gt

​ 2.5文本区域(CDATA区)

  • CDATA语法可以告诉xml解析器,我CDATA里的文本内容,只是纯文本,不需要xml语法解析
  • 格式: <![CDATA]这里可以把你输入的字符原样显示,不会解析xxml]]>
<![CDATA[
	<<<fao>>>
]]

3xml解析技术

  • 不管是html文件还是xml文件,它们都是标记型文档,都可以使用w3c组织制定的dom技术来解析
  • 早期JDK为我们提供了两种xml解析技术DOM和Sax,已经过时。
  • 第三方解析:jdom在dom基础上进行了封装;dom4j又对jdom进行了封装;pull主要用于再Android手机开发,是在跟sax非常类似

4 Dom4j类库的使用

​ 简介

  • 由于dom4j它部署sun公司的技术,而是属于第三方公司的技术,我们需要使用dom4j就需要到dom4j官网下载dom4j的jar包

​ dom4j编程步骤

  1. 先加载xml文件创建Document对象
  2. 通过Document对象拿到根元素
  3. 通过根元素.标签名,可以返回一个集合,这个集合里放着所有指定的标签名的元素对象
  4. 找到你想要修改,删除的子元素,进行相应在的操作
  5. 保存到硬盘上
<?xml version="1.0" encoding="utf-8" ?>
<books>
    <book>
        <sn>sn100</sn>
        <name>时间简史</name>
        <price>75</price>
        <author>霍金</author>
    </book>

    <book>
        <sn>sn103</sn>
        <name>java</name>
        <price>9.9</price>
        <author>范老师</author>
    </book>
</books>
  @Test
    public void test1() throws Exception{

        //要创建一个document对象,我们需要先创建一个SAXReader对象
        SAXReader saxReader=new SAXReader();

        //这个对象用于读取xml文件,然后返回一个Document
        Document document = saxReader.read("D:\\java\\javaweb\\xml\\src\\books.xml");

        System.out.println(document);
        //org.dom4j.tree.DefaultDocument@5cb9f472 [Document: name D:\java\javaweb\xml\src\books.xml]
    }
//读取book.xml文件生成book类
//先创建book类
public class Book {
    private String sn;
    private String name;
    private double 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 double getPrice() {
        return price;
    }

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

    public String getAuthor() {
        return author;
    }

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

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

    public Book() {
    }

    @Override
    public String toString() {
        return "src.pojo.Book{" +
                "sn='" + sn + '\'' +
                ", name='" + name + '\'' +
                ", price=" + price +
                ", author='" + author + '\'' +
                '}';
    }
}
//读取book.xml文件生成book类
    @Test
    public void test2() throws Exception{

         //1读取Books.xml文件
        SAXReader saxReader=new SAXReader();
        Document document = saxReader.read("D:\\java\\javaweb\\xml\\src\\books.xml");

        //2通过Document对象获取根元素对象
        Element rootElement = document.getRootElement();
        System.out.println(rootElement);
        System.out.println();

        //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);

            //gettext获取标签中的文本内容
            String nameTest = nameElement.getText();
            System.out.println(nameTest);

            //直接获取指定标签名的文本内容
            String priceText = book.elementText("price");
            System.out.println(priceText);

            String authorText = book.elementText("author");
            String snText = book.elementText("sn");

            Book bookxml = new Book(snText,nameTest,Double.parseDouble(priceText),authorText);
            System.out.println(bookxml);
            System.out.println();
        }
    }
/*
输出结果:
org.dom4j.tree.DefaultElement@31a5c39e [Element: <books attributes: []/>]

org.dom4j.tree.DefaultElement@56ac3a89 [Element: <name attributes: []/>]
时间简史
75
src.pojo.Book{sn='sn100', name='时间简史', price=75.0, author='霍金'}

org.dom4j.tree.DefaultElement@2d928643 [Element: <name attributes: []/>]
java
9.9
src.pojo.Book{sn='sn103', name='java', price=9.9, author='范老师'}


Process finished with exit code 0
*/
posted @ 2022-05-16 15:09  fao99  阅读(31)  评论(0)    收藏  举报