【Java36】XML,javase总结


1.XML

用word,txt传输数据,和xml一样都没有格式约束,但xml格式规范。
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8" ?>
<!--  如上行文档声明 : 版本 和 编码 -->
<!--
    xml基本语法:
        1. 标签分类 :
              1. 成对标签 :  start tag  -  内容 - end tag
                               开标签             闭标签
                              <标签名>           </标签名>
              2. 单独标签 : 自关闭标签 <标签名/>
        2. xml有且仅有一个根标签 root tag (第一个标签,xml中的所有内容都在内)
        3. 标签可以拥有属性的(开标签和自关闭标签)  key=value 即 id="003"
 
      了解:
        实体字符(转义字符):
                <  ->   &lt;    less than即缩写lt
                >   ->  &gt;    greater than
                &lt; &gt; 小于或大于就是不等于,前端支持,java不支持
        CDATA: unparsed character data 不解析的字符数据
        在这里的内容是不会被解析器所解析(看成注释)
-->
<list>
    <![CDATA[" if(x < > 1){ sout: xx} "]]>
    <hehe id="003"/>
        <book id="001">
            <name>java基础入门</name>
            <desc>人生必读第一本书</desc>
            <price>998</price>
            <extra>if(x &lt; &gt;  1){ sout: xx}</extra>
        </book>
        <book id="002">
            <name>java从入门到放弃</name>
            <desc>人生的最后一本</desc>
            <price>11</price>
        </book>
</list>
<?xml version="1.0" encoding="UTF-8" ?>
<!--
    可扩展: 开发者随意命名标签
        存数据  为了 以后 取数据(解析 parse)
        问题:会给数据解析带来麻烦
        解决: 约束(规则,规范)给xml指定约束, 其内部拥有什么内容,以及内容的编写格式都有要求
        规则: list里面必须是book标签(多个)
                book标签里还可以有name desc price等标签
                这些标签,里面有文本内容
        两种约束: DTD:  document type definition 文档类型定义 (了解)
                   Schema : 模式 (了解) 替代DTD,全称(XML Schema Definition,XSD)
-->

2.DTD约束

<?xml version="1.0" encoding="UTF-8" ?>
<!--
    约束: 1. 根标签 必须是list
         2. list里有book (+ : 表示1个或多个book标签)
        3. book里有name desc price
        4. name desc price = PCDATA(parsed character data) 可以包含文本
        5. book 有一个属性 id 默认值 为 999
        如下写完约束后,会自动提示
-->
<!DOCTYPE list [
        <!ELEMENT list (book+)>
        <!ELEMENT book (name,desc,price)>
        <!ELEMENT name     (#PCDATA)>
        <!ELEMENT desc     (#PCDATA)>
        <!ELEMENT price     (#PCDATA)>
        <!ATTLIST book id CDATA "999">
        ]>

<!--111111111111111111111111111111111111111111111111111111111111111-->        
<list>
    <book id="001">
        <name>java基础入门</name>
        <desc>人生必读第一本书</desc>
        <price>998</price>
    </book>
    <book id="002">
        <name>java基础入门</name>
        <desc>人生必读第一本书</desc>
        <price>998</price>
    </book>
</list>

3.schema约束

如下文件05_book.xsd

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

<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'
        targetNamespace='http://www.itheima.com'
        elementFormDefault="unqualified">
    <!--
    	上面几行就是命名空间技术,需要被另一个文件引用即06_book.xml引用才可以生效。schema 约束: 约束规则用xml语法来书写的。
        element : 元素(开标签到闭标签之间的内容,我们统称为标签)
        complexType : 复杂类型(但凡元素有子标签或属性)
        sequence : 序列 (子元素的序列)
        maxOccurs: 最大出现次数,如下书标签最少出现一次,至多随意
    -->

<!--11111111111111111111111111111111111111111111111111111111111111111111111111111-->  
    <xs:element name='书架' >
        <xs:complexType>
            <xs:sequence maxOccurs='unbounded' minOccurs="1">
                <xs:element name='' >
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name='书名' type='xs:string' />
                            <xs:element name='作者' type='xs:string' />
                            <xs:element name='售价' type='xs:string' />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

如下是06_book.xml调用05_book.xsd

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

<itheima:书架 xmlns:itheima="http://www.itheima.com"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.itheima.com 05_book.xsd">

<!--11111111111111111111111111111111111111111111111111111111111111111111111-->  
    <>
        <书名>呵呵</书名>
        <作者>啦啦</作者>
        <售价>嘻嘻</售价>
    </>
</itheima:书架>

如下xml用到在线的xsd,自动补全。
在这里插入图片描述

4.xml解析(了解)

dom4J不是sun公司开发的,所以放入lib目录,add as Library相当于解压,sun公司开发的放External libraries。SAX解析读完一行解析完就可以当时释放解析内容,不耗内存但慢。SAX的变形pull。
在这里插入图片描述
在这里插入图片描述

package com.itheima04.parse;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.util.List;

public class ParseDemo {
    
    
    public static void main(String[] args) throws DocumentException {
    
    
        SAXReader reader = new SAXReader();
        //将下面这个文件读到内存中       
        Document document = reader.read("02_book.xml"); //document文档对象 表示  02_book.xml文件的        
        Element rootElement = document.getRootElement(); //解析过程: 爬树        
        List<Element> books = rootElement.elements("book"); //获取根元素 store的所有book子元素
        
        for (Element book : books) {
    
                    
            String name = book.elementText("name"); //获取子标签内部的文本数据
            String desc = book.elementText("desc");
            String price = book.elementText("price");                            
            String id = book.attributeValue("id"); //获取book标签的属性id的值
            System.out.println(id + "," + name + "," + desc + "," + price);
        }
    }
}

在这里插入图片描述

5.javase总结

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
B站/知乎/微信公众号:码农编程录
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43435675/article/details/112759789