XML

一、XML的介绍

XML是可扩展的标记性语言

二、XML的作用

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

三、XML的创建

  1.     先创建一个JAVA工程或Moudle,工程右击新建一个Directory
  2.     文件夹右击new --> File
  3.     取文件名为xxx.xml

四、XML的使用

XML文件的注释格式与HTML相同:

<!--注释内容-->

    每个xml文件第一行必须是:

<?xml version="1.0" encoding="UTF-8"?>

    注意:
    ① <?xml中不能有空格,否则报错
    ② version代表版本号
    ③ encoding是XML的文件编码
    XML的标签、属性等用法与HTML一致

  • 所有 XML 元素都须有关闭标签(也就是闭合)
  • XML 标签对大小写敏感
  • XML 必须正确地嵌套
  • XML 文档必须有根元素
  • XML 的属性值须加引号
  • XML 中的特殊字符(&lt 、&gt)
  • XML中的大段文字可以使用文本区域(CDATA区),此区域中的内容不会被解析,只当作纯文本

代码示例:

<?xml version="1.0" encoding="utf-8" ?>
<books> <!--表示有多个book-->
    <book id="SN123"> <!--book标签描述一本书,id属性描述编号-->
        <!--以下标签描述图书的信息-->
        <name>时间简史</name>        
        <author>霍金</author>
        <price>23.6</price>
    </book>
    <book> <!--book标签用来描述另一本书-->
        <name>Java核心技术</name>
        <author>霍曼斯特</author>
        <price>149.0</price>
    </book>
<![CDATA[<book>我不会被解析</book>]]>
</books>

五、DOM4J解析技术

XML文件和HTML文件都可以使用DOM技术来解析,DOM将XML文档作为一个树形结构,使用DOM4J时需要到官网下载jar包

dom4j编程的使用   

(1) 在当前的Moudle下新建libs文件夹,将上述jar包导入,右键Add as Library
(2) 创建一个需要解析的XML文件

dom4j 编程步骤

  • 先加载 xml 文件创建 Document 对象
  • 通过 Document 对象拿到根元素对象
  • 通过根元素.elelemts(标签名); 可以返回一个集合,这个集合里放着。所有你指定的标签名的元素对象
  • 找到你想要修改、删除的子元素,进行相应在的操作
  • 保存到硬盘上
<?xml version="1.0" encoding="UTF-8" ?>
<books>
    <book sn="SN123">
        <name>白马啸西风</name>
        <price>33.5</price>
        <author>金庸</author>
    </book>
    <book sn="SN456">
        <name>汇编语言</name>
        <price>25.9</price>
        <author>王爽</author>
    </book>
</books>

(3)创建XML文件对应的Book类

public class Book {
    private String name;
    private String sn;
    private Double price;
    private String author;
    //无参、全参构造器
    public Book(String name, String sn, Double price, String author) {
        this.name = name;
        this.sn = sn;
        this.price = price;
        this.author = author;
    }
    public Book() {
    }
    //各属性的getter/setter方法
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSn() {
        return sn;
    }
    public void setSn(String sn) {
        this.sn = sn;
    }
    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;
    }
    //toString方法
    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", sn='" + sn + '\'' +
                ", price=" + price +
                ", author='" + author + '\'' +
                '}';
    }
}

(4)遍历XML文件中所有标签的内容

public class Test {
    @org.junit.Test
    public void readXMl() throws DocumentException {
        //1.创建SAXReader对象通过read方法读取XML文件
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read("src/books.xml");
        //2.通过Document对象的getRootElement方法得到XML文件的根元素对象
        Element rootElement = document.getRootElement();
        //3.通过Element中的elements(标签名)或element(标签名)获取当前元素下
        //  的指定子元素集合(加s)或子元素(不加s)
        List<Element> books = rootElement.elements("book");
        //4.遍历每个book标签对象,获取到book对象内的每一个子元素
        for (Element book: books) {
            /***********************************************************/
            //获取到book下的name元素
            Element name = book.element("name");
            //Element的getText方法获取标签中的文本内容
            String nameText = name.getText();
            /***********************************************************/
            //获取到book下的sn属性,Element的attributeValue方法可以获取属性
            String snValue = book.attributeValue("sn");
            //获取到book下的price元素,elementText方法直接获取指定标签中的文本内容
            String priceText = book.elementText("price");
            //获取到book下的author元素的内容
            String authorText = book.elementText("author");
            //使用得到的标签内容创建Book对象,并输出
            System.out.println(new Book(nameText,snValue,
                    Double.parseDouble(priceText),authorText));
        }
    }
}

运行结果:

 

一些参考资料

https://www.w3school.com.cn/xpath/index.asp

posted @ 2021-04-24 21:10  王陸  阅读(118)  评论(0编辑  收藏  举报