XML文件

XML文件

可扩展标记性语言

作用

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

XML语法

  1. 文档声明

    <?xml version="1.0" encoding="utf-8" ?>
    
    • version:表示xml的版本
    • encoding:表示xml文件本身的编码
  2. 元素(标签)

    元素是指从开始标签到结束标签的内容(包括标签)

    • 命名规则:
      1. 名称可以含字母、数字以及其他的字符
      2. 名称不能以数字或者标点符号开始
      3. 名称不能包含空格
    • xml中的元素(标签)分成单标签和双标签
      • 单标签
        <标签名属性=”值” 属性=”值” ...... />
        
      • 双标签
        <标签名属性=”值” 属性=”值” ......>文本数据或子标签</标签名>
        
  3. xml属性

    1. 属性可以提供元素的额外信息
    2. 一个标签上可以书写多个属性。每个属性的值必须使用引号引起来
  4. xml注释

    <!-- xml 注释-->
    
  5. 文本区域(CDATA区)

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


  1. 所有XML元素都须有关闭标签(也就是闭合)

  2. XML标签对大小写敏感

  3. XML必须正确地嵌套

  4. XML文档必须有根元素

    根元素是没有父标签的顶级元素,而且是唯一一个才可以

<?xml version="1.0" encoding="utf-8" ?>
<books><!--books 表示多本图书信息-->
    <book sn="SN123456"><!--book 表示一本图书信息-->
        <name>红楼梦</name>
        <author>
            曹雪芹
            <![CDATA[
                <<<<<<<一个为伟大的作家
            ]]>
        </author>
        <price>50</price>
    </book>
</books>

使用dom4j解析XML

获取document对象

  • 添加dom4j的jar包,并将jar包添加到类路径

  • 准备好需要被解析的xml文件

    使用的xml文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <books>
        <book sn="SN12341232">
            <name>辟邪剑谱</name>
            <price>9.9</price>
            <author>班主任</author>
        </book>
        <book sn="SN12341231">
            <name>葵花宝典</name>
            <price>99.99</price>
            <author>班长</author>
        </book>
    </books>
    
  • 解析获取Document对象的代码

    创建SaxReader输入流对象,用于读取xml文件,并创建Document对象

    //创建一个SAXReader输入流,读取xml配置文件,生成Document对象
    SAXReader saxReader = new SAXReader();
    Document document = saxReader.read("src/test.xml");
    

遍历标签,获取所有标签中的内容

  1. 通过Document对象获取XML的根元素对象
  2. 通过根元素获取所有的根元素标签对象
    • element()和elements()都是通过标签名查找子元素
    • asXML():把标签对象转换为标签字符串
    • getText():可以获取标签中的文本内容
    • elementText():可以直接获取指定标签名的文本内容
  3. 遍历处理每个根标签转化为对应的类
SAXReader saxReader = new SAXReader();
Document document = saxReader.read("src/test.xml");

Element rootElement = document.getRootElement();
//        System.out.println(rootElement);//org.dom4j.tree.DefaultElement@148080bb [Element: <books attributes: []/>]

List<Element> books = rootElement.elements("book");
for(Element e : books){
            //asXML():把标签对象转换为标签字符串
//            System.out.println(e.asXML());

    Element name = e.element("name");
//            System.out.println(name.asXML());

    //getText():可以获取标签中的文本内容
    String nameText = name.getText();

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

    String authorText = e.elementText("author");
//            System.out.println(authorText);

    //attributeValue():获取标签的属性
    String sn = e.attributeValue("sn");
//            System.out.println(sn);

    System.out.println(new test(sn, nameText, Double.parseDouble(priceText), authorText));
}
posted @ 2020-08-30 17:46  南煎丸子  阅读(143)  评论(0编辑  收藏  举报