学习笔记—XML

XML

XML简介

  XML指可扩展标记语言(EXtensible Markup Language),是一种标记语言。

  XML是一种灵活的语言,标签没有被预定义,需要自行定义标签。

  通常,XML被用于信息的记录和传递,而非显示数据。XML被设计为具有自我描述性。

  XML经常被用于充当配置文件。

XML语法

  声明信息,它定义XML的版本(1.0)和所使用的编码(一般为UTF-8)

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

   xml有且仅有一个根元素

  xml是大小写敏感的

  标签是成对的,必须正确嵌套

  xml的属性值必须加引号

  注释的写法

<!-- 这里是注释 -->

 

XML 文档形成了一种树结构,它从“根部”开始,然后扩展到“枝叶”。

 

  形式良好的xml实例

<?xml version="1.0" encoding="UTF-8"?>
<!-- 这里是注释 -->
<books>
    <book id="01">
        <name>java从入门到精通</name>
        <author>Tom</author>
        <price>45.6</price>
    </book>
    <book id="02">
        <name>mysql学习指南</name>
        <author>lili</author>
        <price>49.6</price>
    </book>
</books>

 

拥有正确语法的 XML 被称为“形式良好”的 XML。

通过 DTD 验证的 XML 是“合法”的 XML。

 

DTD

DTD简介

  DTD(Document Type Definition文档类型定义)

  DTD用与约束xml的文档格式。可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。

  DTD可被成行地声明于XML文档中(内部DTD),也可作为一个外部引用(外部DTD)。

使用DTD

内部DTD的定义

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

   元素声明语法

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

  数量词

  • +  :表示出现 1 次或多次,至少一次。
  • ?:表示出现 0 次或 1 次
  • *  :表示出现任意次

  属性声明语法

  • 属性类型:CDATA,表示字符数据(character data)
  • 默认值:
    • #REQUIRED  表示必须出现
    • #IMPLIED  表示不是必须的
<!ATTLIST 元素名称 属性名称 属性类型 默认值>

  

  合法的xml实例

<?xml version="1.0" encoding="UTF-8"?>
<!-- 声明内部DTD -->
<!DOCTYPE books [
    <!ELEMENT books (book*) >
    <!ELEMENT book (name,author,price)>
    <!ATTLIST book id CDATA #REQUIRED>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT author (#PCDATA)>
    <!ELEMENT price (#PCDATA)>
]>
<books>
    <book id="01">
        <name>java从入门到精通</name>
        <author>Tom</author>
        <price>45.6</price>
    </book>
    <book id="02">
        <name>mysql学习指南</name>
        <author>lili</author>
        <price>49.6</price>
    </book>
</books>

 

外部DTD定义

  创建一个独立的DTD文件

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT books (book*) >
<!ELEMENT book (name,author,price)>
<!ATTLIST book id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>

  在xml中引入外部DTD文件

<!DOCTYPE 根元素 SYSTEM "文件名">

  实例

<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入外部DTD文件 -->
<!DOCTYPE book SYSTEM "book.dtd">
<books>
    <book id="01">
        <name>java从入门到精通</name>
        <author>Tom</author>
        <price>45.6</price>
    </book>
    <book id="02">
        <name>mysql学习指南</name>
        <author>lili</author>
        <price>49.6</price>
    </book>
</books>

 

XSD(XML Schema Definition)

  XML Schema 是DTD 的替代者

  XSD 不仅可以定义XML文档的结构,还可以规范文档的内容

  XSD 本身也是XML文档

  XSD 采用XML文档来定义语义约束,比DTD要复杂一些,但是功能强大。

  • 支持丰富的数据结构
  • 允许开发者自定义数据类型
  • 可读性强
  • 可针对未来需求进行扩展

 

XML的解析

  对xml文件进行操作,包括创建 xml,对 xml 文件进行增删改查操作

常见的xml解析技术

DOM解析

  XML DOM(XML Document Object Model),即XML文档对象模型。

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

  XML文档对象模型定义访问和操作XML文档的标准方法。

SAX解析

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

  消耗资源小,适用于数据量较大的XML。

JDOM解析

  第三方提供,开源免费。

  比DOM更快,使用具体类而不使用接口。

DOM4J

  第三方提供,开源免费。

  是JDOM的升级版。

 

DOM4J解析XML

  借助DOM4J解析读取XML文件内容。

    /**
     * 借助DOM4J解析读取XML文件内容
     * 
     * @author shangyang
     * @throws Exception
     */
    public static void readerXML() throws Exception {

        // 创建SAXReader对象,用于读取xml
        SAXReader reader = new SAXReader();
        // 读取xml文件,得到Document对象
        Document doc = reader.read(new File("src/book.xml"));
        // 获取根元素
        Element root = doc.getRootElement();
        // 获取根元素下所有子元素
        Iterator<Element> it = root.elementIterator();
        while (it.hasNext()) {
            // 取出元素
            Element e = it.next();
            // 获取id属性
            Attribute id = e.attribute("id");
            System.out.println(e.getName() + id.getValue());
            // 获取子元素
            Element name = e.element("name");
            Element author = e.element("author");
            Element price = e.element("price");

            System.out.println(name.getName() + " = " + name.getStringValue());
            System.out.println(author.getName() + " = " + author.getStringValue());
            System.out.println(price.getName() + " = " + price.getText());
            System.out.println("--------------");
        }
    }

 

 

  通过DOM4J解析生成xml文件

    /**
     * 通过DOM4J解析生成xml文件
     * @author shangyang
     * @throws Exception
     */
    public static void writerXML() throws Exception {
        // 1、通过DocumentHelper生成一个Document对象
        Document doc = DocumentHelper.createDocument();
        // 2、添加并得到根元素
        Element root = doc.addElement("sources");
        // 3、为根元素添加子元素
        Element student = root.addElement("student");
        // 4、为student元素添加属性
        student.addAttribute("id", "1614010101");
        // 5、为student添加子元素
        Element name = student.addElement("name");
        Element course = student.addElement("course");
        Element results = student.addElement("results");
        // 6、为子元素添加文本
        name.addText("张三");
        course.addText("数据结构");
        results.addText("67");
        // 7、将doc输出到xml文件中
        OutputFormat format = OutputFormat.createPrettyPrint();
        XMLWriter writer = new XMLWriter(new FileWriter(new File("src/sources.xml")), format);
        writer.write(doc);
        writer.close();
    }

posted @ 2019-03-18 18:03  殇灬央  阅读(194)  评论(0编辑  收藏  举报
/* */