XML配置文件,学习框架需要的知识,带解析演示

写在前面: 这篇文章介绍XML的语法以及使用,还有使用java解析xml。
希望能够对大家有所帮助,点赞支持是我最大的动力!
作者公众号:小白编码

XML是什么?

  • XML 指可扩展标记语言(EXtensible Markup Language)
  • XML 是一种标记语言,很类似 HTML
  • XML 的设计宗旨是传输数据,而非显示数据
  • XML 标签没有被预定义。您需要自行定义标签
  • XML 被设计为具有自我描述性
  • XML 是 W3C 的推荐标准

XML 与 HTML 的主要差异

XML 不是 HTML 的替代。

XML 和 HTML 为不同的目的而设计:

XML 被设计为传输和存储数据,其焦点是数据的内容。

HTML 被设计用来显示数据,其焦点是数据的外观。

HTML 旨在显示信息,而 XML 旨在传输信息。

html 标签:

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

xml 的主要作用有:

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

xml 语法

  1. 文档声明。
  2. 元素(标签)
  3. xml 属性
  4. xml 注释
  5. 文本区域(CDATA 区)

属性:
version 是版本号
encoding 是xml 的文件编码
standalone=“yes/no” 表示这个xml 文件是否是独立的xml 文件

xml格式:

<?xml version="1.0" encoding="UTF-8"?>
<!--这个<?xml 要连在一起写,否则会有报错-->
<!-- xml 声明version 是版本的意思encoding 是编码-->
<books> <!-- 这是xml 注释-->
    <book id="SN123123413241"> 
    <!-- book 标签描述一本图书id 属性描述的是图书的编号-->
        <name>java从入门到放弃</name> 
        <!-- name 标签描述的是图书的信息-->
        <author>codwhite</author> 
        <!-- author 单词是作者的意思,描述图书作者-->
        <price>999</price>
        <!-- price 单词是价格,描述的是图书的价格-->
    </book>
</books>

XML语法规则:

  • XML 开头声明
<?xml version="1.0" encoding="UTF-8" ?>
<!-- xml 声明version 是版本的意思encoding 是编码-->
  • XML 文档必须有根元素
<!--必须有一个根元素,可以根据自身要求定义-->
<root>
    <book>
      <name>java从入门到放弃</name>  
    </book>
</root>
  • 所有的 XML 元素都必须有一个关闭标签
 <name>java从入门到放弃</name>
 <!--</name>就是一个关闭标签-->
 错误写法:
 <name>java从入门到放弃
  • XML 标签对大小写敏感
<Name>java从入门到放弃</name>
<!--不能这样声明,否则报错-->
正确写法:
<name>java从入门到放弃</name>
  • XML 必须正确嵌套
正确的嵌套:
<book>
      <name>java从入门到放弃</name>
</book>
错误的嵌套:
<name>
        <book>java从入门到放弃</name>
</book>
  • XML 属性值必须加引号

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

  正确属性值写法:
  <book id="SN123123413241">
        <name>java从入门到放弃</name>
  </book>
  错误属性值写法:
    <book id=SN123123413241>
        <name>java从入门到放弃</name>
    </book>
  • XML 中的注释
<!--这个就是XML注释-->
  • 实体引用

在 XML 中,一些字符拥有特殊的意义。

如果您把字符 “<” 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。

这样会产生 XML 错误:

错误写法:
<message>if salary < 1000 then</message>
用实体引用来避免错误:(&lt代表<)
<message>if salary &lt; 1000 then</message>

在 XML 中,有 5 个预定义的实体引用:

<<less than
>>greater than
&&ampersand
'apostrophe
""quotation mark
  • XML标签名称不能以数字或者标点符号开始
 错误写法:
<1book id="SN123123413241"/>
  • 名称不得包含空格
<b ook id="SN123123413241"/>
  • XML中的单标签与双标签
单标签
格式: <标签名属性=”值” 属性=”值” ...... />
 <book id="SN123123413241"/>
双标签
 <book id=SN123123413241></book>
格式:< 标签名属性=”值” 属性=”值” ......>文本数据或子标签</标签名>

文本区域(CDATA 区)

CDATA 语法可以告诉xml 解析器,我CDATA 里的文本内容,只是纯文本,不需要xml 语法解析

CDATA 格式:

<![CDATA[ 这里可以把你输入的字符原样显示,不会解析xml ]]>

Dom4j 解析技术

dom4j 编程步骤:

首先需要dom4j库:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gslee4B1-1589436541345)(C:\Users\JUN\AppData\Roaming\Typora\typora-user-images\image-20200514134445620.png)]

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

①需要解析的books.xml 文件内容
<?xml version="1.0" encoding="UTF-8"?>
<books>
    <book sn="SN12341232">
        <name>JAVA从入门到放弃</name>
        <price>9.9</price>
        <author>小白</author>
    </book>
    <book sn="SN12341231">
        <name>Mysql从删库到跑路</name>
        <price>99.99</price>
        <author>codewhite</author>
    </book>
</books>
②创建javabean(books)
//get,set,构造器,tostring自行添加
public class Book {

    private String sn;
    private String name;
    private Double price;
    private String author;
}
③解析获取Document 对象的代码

第一步,先创建SaxReader对象。这个对象,用于读取xml 文件,并创建Document

/*
* dom4j 获取Documet 对象
*/
 @Test
    public void testGetDocument() throws DocumentException {
        // 要创建一个Document 对象,需要我们先创建一个SAXReader 对象
        SAXReader reader = new SAXReader();
        // 这个对象用于读取xml 文件,然后返回一个Document。
        Document document = reader.read("src/books.xml");
        // 打印到控制台,看看是否创建成功
        System.out.println(document);
    }
④遍历标签获取所有标签中的内容

需要分四步操作:
第一步,通过创建SAXReader对象。来读取xml 文件,获取Document 对象
第二步,通过Document 对象。拿到XML 的根元素对象Element
第三步,通过根元素对象。获取所有的book 标签对象
第四步,遍历每个book 标签对象。然后获取到book 标签对象内的每一个元素,再通过getText() 方法拿到起始标签和结束标签之间的文本内容

    /*
     * 读取xml 文件中的内容
     */
    @Test
    public void readXML() throws DocumentException {
        // 第一步,通过创建SAXReader 对象。来读取xml 文件,获取Document 对象
        SAXReader reader = new SAXReader();
        Document document = reader.read("src/books.xml");
        // 第二步,通过Document 对象。拿到XML 的根元素对象
        Element root = document.getRootElement();

        // 第三步,通过根元素对象。获取所有的book 标签对象
        // Element.elements(标签名)它可以拿到当前元素下的指定的子元素的集合
        List<Element> books = root.elements("book");

        // 第四步,遍历每个book 标签对象。然后获取到book 标签对象内的每一个元素,
        for (Element book : books) {

            // 打印测试
            // Element.asXML() 它将当前所有元素转换成为String 对象
//             System.out.println( root.asXML() );

            // 拿到book 下面的name 元素对象
            Element nameElement = book.element("name");
            // 拿到book 下面的price 元素对象
            Element priceElement = book.element("price");
            // 拿到book 下面的author 元素对象
            Element authorElement = book.element("author");
            // 再通过getText() 方法拿到起始标签和结束标签之间的文本内容
            System.out.println("书名:" + nameElement.getText() + " , 价格:"
                    + priceElement.getText() + ", 作者:" + authorElement.getText());
        }
    }

结果演示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VqJV5JEt-1589436541347)(C:\Users\JUN\AppData\Roaming\Typora\typora-user-images\image-20200514135957025.png)]

案例2:

    @Test
    public void test2() throws Exception {
        //读取books.xml文件
        SAXReader saxReader = new SAXReader();
        //2.通过Document对象获得根元素
        Document document = saxReader.read("src/books.xml");
        Element rootElement = document.getRootElement();
        System.out.println(rootElement);
        //3.通过根元素获取book标签对象
        //element和lement都是通过标签名查找子元素
        List<Element> books = rootElement.elements("book");
        for (Element book : books) {

            // Element.asXML() 它将当前所有元素转换成为String 对象
//             System.out.println( root.asXML() );

            // Element.element(标签名)拿到当前元素下子元素
            Element elementName = book.element("name");
            //getText 可以将获取标签中的文本内容
            String nameText = elementName.getText();
            System.out.println(nameText);

            
            //或者用elementTest("标签名")直接获取标签名的文本内容
            String priceText = book.elementText("price");
            String authorText = book.elementText("author");
            String snValue = book.attributeValue("sn");
            System.out.println(new Book(snValue, nameText, Double.parseDouble(priceText), authorText));

        }
    }

结果演示:
在这里插入图片描述

写在后边:

本文学习资料来源于:百度百科,菜鸟教程,尚硅谷教程等。
如果有问题可以联系我。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值