• XML 和 DTD


    1.XML

    1.1xml简介

    a)xml,eXtensible Markup Language,可扩展标记语言,是一种标记语言;

    b)xml是一种非常灵活的语言,没有固定的标签,所有的额标签都可以自定义。

    c)通常,xml被用于信息的记录和传递,因此,xml经常被用于充当配置文件。

    1.2格式良好的xml

    a)声明信息,用于描述xml的版本的编码格式

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

    b)xml有且仅有一个根元素

    c)xml是大小写敏感的

    d)标签是成对的,而且要正确嵌套

    e)属性值要使用双引号;例如:

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 这里是注释 -->
    <books>
        <book id="b01">
            <name>java高级编程</name>
            <author>张三</author>
            <price>50.5</price>
        </book>
        <book id="b02">
             <name>java中级编程</name>
             <author>李四</author>
             <price>30.5</price>
        </book>
    </books>

    2.DTD

    2.1DTD简介

    a)DTD,Document Type Definition,文档类型定义

    b)DTD用于约束xml的文档格式,保证xml是一个有效的xml;

    c)DTD可以分为两种,内部DTD,外部DTD

    2.2使用DTD

    2.2.1内部DTD的定义

    a)语法如下:

    <!DOCTYPE 根元素 [元素声明]>

    b)元素声明语法:

    <!ELEMENT 元素名(子元素[,子元素...])>

    c)数量词

    >+:表示出现一次或多次,至少一次

    >?:表示出现0次或1次;

    >*:表示出现任意次

    d)属性声明语法:

    >属性类型:CDATA,表示字符数据(character data)

    >默认值:

       - #REQUIRED,表示必须出现

       -#IMPLIED,表示不是必须的

    <!ATTLIST 元素名称 属性名称 属性类型 默认值>

    e)带DTD的完整xml代码:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE scores [
         <!ELEMENT scores (student+)>
         <!ELEMENT student (name, course,score)>
         <!ATTLIST student id CDATA #REQUIRED>
         <!ELEMENT name (#PCDATA)>
         <!ELEMENT course (#PCDATA)>
         <!ELEMENT score (#PCDATA)>
    ]>
    <scores>
        <student id="1">
             <name>王同</name>
             <course>java</course>
             <score>89</score>
        </student>
            <student id="2">
             <name>李佳</name>
             <course>sql</course>
             <score>58</score>
        </student>
    </scores>

    2.2.2外部DTD的定义

    a)创建一个独立的dtd文件

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

    <!ELEMENT scores (student+)>

    <!ELEMENT student (name, course, score)>

    <!ATTLIST student id CDATA #REQUIRED>

    <!ELEMENT name (#PCDATA)>

    <!ELEMENT course (#PCDATA)>

    <!ELEMENT score (#PCDATA)>

    b)在xml中引入外部DTD文件

    <!--引入外部DTD文件>

    <!DOCTYPE scores SYSTEM "scores.dtd">

    3.XML的解析技术

    3.1.1 DOM解析

    是官方提供的解析方式基于xml树解析的

    3.1.2 SAX解析

    是民间的解析方式基于事件的解析

    3.1.3 JDOM解析

    第三方提供开源免费的解析方式DOM解析快

    3.1.4 DOM4J

    第三方提供开源免费JDOM的升级版

    3.2 DOM4J解析XML

    需要导入dom4jjar包, 解析xml的入口, 是需要先拿到一个Document对象

    3.2.1 读取xml文件中的信息

    需要导入dom4jjar包, 解析xml的入口, 是需要先拿到一个Document对象

        public static void main(String[] args) throws DocumentException {
            //1.创建SAXReader对象,用于读取xml文件
            SAXReader reader = new SAXReader();
            //2.读取xml文件,得到Document对象
            Document doc = reader.read(new File("src/scores2.xml"));
            //3.获取根元素
            Element root = doc.getRootElement();
            //4.获取根元素下所有子元素
            Iterator<Element> iter = root.elementIterator();
            while(iter.hasNext()) {
                //取出元素
                Element e = iter.next();
                System.out.println(e.getName());
                //获取id属性
                Attribute id = e.attribute("id");
                System.out.println(id.getName()+"="+id.getValue());
                //获取student的子元素
                Element name = e.element("name");
                Element course = e.element("course");
                Element score = e.element("score");
                //打印
                System.out.println(name.getName()+"="+name.getStringValue());
                System.out.println(course.getName() + "=" + course.getText());
                System.out.println(score.getName() + "=" + score.getText());
                
            }
        }
    }

    3.2.2 生成xml文件

    public class TestXml2 {

    public static void main(String[] args) throws Exception {

    // [1] 通过DocumentHelper生成一个Document对象

    Document doc = DocumentHelper.createDocument();

    // [2] 添加并得到根元素

    Element root = doc.addElement("books");

    // [3] 为根元素添加子元素

    Element book = root.addElement("book");

    // [4] book元素添加属性

    book.addAttribute("id", "b01");

    // [5] book添加子元素

    Element name = book.addElement("name");

    Element author = book.addElement("author");

    Element price = book.addElement("price");

    // [6] 为子元素添加文本

    name.addText("Thinking in Java");

    author.addText("小伟");

    price.addText("88");

    // [7] 格式良好的输出

    OutputFormat format = OutputFormat.createPrettyPrint();

    XMLWriter writer = new XMLWriter(new FileWriter(new File("src/book2.xml")), format);

    writer.write(doc);

    // [8] 关闭资源

    writer.close();

    }

    }

  • 相关阅读:
    1. 初探--prometheus调研
    Spring boot采坑记--- 在启动时RequstMappingHandlerMapping无法找到部分contorller类文件的解决方案
    Servlet——映射细节、3.0注解配置、线程不安全问题
    Servlet——概述、实现方式、生命周期、ServletConfig类
    HTTP——概述、请求和响应、GET和POST请求
    Tomcat——简介、目录结构等
    XML解析——Dom4j解析器
    XML解析——Jsoup解析器
    XML解析——Jaxp解析器
    XML——简介、语法、约束、解析
  • 原文地址:https://www.cnblogs.com/bjsxt123/p/8992647.html
Copyright © 2020-2023  润新知