XML学习笔记

Posted Moon&&Dragon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XML学习笔记相关的知识,希望对你有一定的参考价值。

XML学习笔记

1 什么是XML

Xml: Extensible(可扩展) Markup(标记) Language(语言),是一种用于标记电子文件使其具有结构性的标记语言。

作用:

  • 保存数据,单机应用使用数据库不方便,所有可以使用xml文件来保存。
  • 网络传输,原始传输的时候使用的是数据包,但是数据包解析困难,而且不能支持量大的数据,所以也可以使用xml文件来传递。
  • 配置文件,之前会使用properties文件,但是他的结构不够清晰,所以可以使用xml文件来配置。

特点:

  • 平台无关性,windows, linux…都支持xml,是独立的语言
  • 基本所有的语言都是支持xml
  • xml的内容是可以自定义的

2 第一个XML文件

2.1 XML文件语法规范

  • xml文件中必须有根节点
  • xml元素标签有开必有合
  • xml元素对大小写敏感
  • xml元素标签必须正确嵌套
  • xml元素的属性必须加引号(单引号和双引号都可)

2.2 创建XML

这里使用IDEA创建,在包下或者文件夹点击右键新建一个file,名字以.xml结尾

在这里插入图片描述

创建好以后,设置xml文件的头标记

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

设置好以后,这个xml文件就可以使用了

2.3 定义一个xml

<?xml version="1.0" encoding="UTF-8" ?>
<!--
       定义一个xml文件,模仿spring配置文件
-->

<!--根节点-->
<beans>
    <!--定义bean,设置id和class-->
    <bean id="lili" class="com.moon.pojo.Woman">
        <!--定义属性-->
        <property name="name">
            <!--定义list-->
            <list>
                <!--设置value-->
                <value>1</value>
                <value>2</value>
                <value>3</value>
            </list>
        </property>
    </bean>
</beans>

3 CDATA区域

在xml中书写一些特熟符号,可能会被识别为标签的信息,比如像输入小于号<,在java中我们可以通过\\来转译,在xml中我们就需要使用CDATA区来书写这些符号

CDATA区域书写定义:<![CDATA[书写区]]>

<bean> <![CDATA[7<6<3>111]]> </bean>

4 DTD文件

DTD:Document Type Definition,定义一个xml文件中写的内容

简单的dtd内容

<!--跟节点下可以有多个bean-->
<!ELEMENT beans (bean*)>
<!--定义一个bean,bean下可以写property-->
<!ELEMENT bean (property*)>
<!--property下可以有多个value和ref-->
<!ELEMENT property (value* ref*)>
<!--定义value-->
<!ELEMENT value ()>
<!--定义ref-->
<!ELEMENT ref ()>

dtd的引用

<?xml version="1.0" encoding="UTF-8" ?>
<!--
       定义一个xml文件,模仿spring配置文件
-->
<!--根节点-->
<!DOCTYPE beans SYSTEM "demo.dtd">
<beans>
    <bean>
        <property>
            <ref></ref>
            <value></value>
        </property>
    </bean>
</beans>

5 XSD文件

XSD:XML Schemas Definition,定义结构,是DTD的替代品

模仿一个简单的spring配置

<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://www.moon.org/simpleSpring/Schema/beans"
           xmlns:tns="http://www.moon.org/simpleSpring/Schema/beans">

    <!--设置bean的属性-->
    <xs:attributeGroup name="beanAttr">
        <!--id-->
        <xs:attribute name="id" type="xs:string"/>
        <!--class-->
        <xs:attribute name="class" type="xs:string"/>
        <!--作用域属性-->
        <xs:attribute name="scope" default="singleton">
            <xs:simpleType>
                <!--String类型-->
                <xs:restriction base="xs:string">
                    <!--枚举类型-->
                    <xs:enumeration value="singleton"/>
                    <xs:enumeration value="prototype"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
        <!--懒加载属性-->
        <xs:attribute name="lazy-init" default="default">
            <xs:simpleType>
                <!--布尔类型-->
                <xs:restriction base="xs:boolean">
                    <!--枚举类型-->
                    <xs:enumeration value="default"/>
                    <xs:enumeration value="false"/>
                    <xs:enumeration value="true"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
        <!--初始化方法-->
        <xs:attribute name="init-method" type="xs:string"/>
        <!--销毁方法-->
        <xs:attribute name="destroy-method" type="xs:string"/>
    </xs:attributeGroup>
    <!--设置property属性-->
    <xs:attributeGroup name="propertyAttr">
        <!--name属性-->
        <xs:attribute name="name" type="xs:string" use="required"/>
        <!--value属性-->
        <xs:attribute name="value" type="xs:string"/>
        <xs:attribute name="ref" type="xs:element"/>
    </xs:attributeGroup>
    <!--设置集合通用属性-->
    <xs:attributeGroup name="collectionAttr">
        <xs:attribute name="value-type" type="xs:string"/>
    </xs:attributeGroup>
    <!--设置entry属性-->
    <xs:attributeGroup name="entryAttr">
        <xs:attribute name="key" type="xs:string" use="required"/>
        <xs:attribute name="value" type="xs:string"/>
        <xs:attribute name="value-ref" type="xs:string"/>
    </xs:attributeGroup>

    <!--设置bean节点-->
    <xs:element id="bean" name="bean">

        <xs:complexType>
            <xs:sequence>
                <xs:element ref="tns:property" maxOccurs="unbounded" minOccurs="0"/>
            </xs:sequence>
            <xs:attributeGroup ref="tns:beanAttr"/>

        </xs:complexType>

    </xs:element>
    <!--设置property节点-->
    <xs:element id="property" name="property">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="tns:value" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element ref="tns:ref" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element ref="tns:list" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element ref="tns:set" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element ref="tns:map" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:attributeGroup ref="tns:propertyAttr"/>
        </xs:complexType>
    </xs:element>

    <!--设置value节点-->
    <xs:element name="value" id="value" type="xs:string"/>
    <!--设置引用节点-->
    <xs:element name="ref" id="ref" type="xs:element"/>

    <!--设置list节点-->
    <xs:element name="list" id="list">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="tns:value" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element ref="tns:ref" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:attributeGroup ref="tns:collectionAttr"/>
        </xs:complexType>
    </xs:element>
    <!--设置set节点-->
    <xs:element name="set" id="set">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="tns:value" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element ref="tns:ref" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:attributeGroup ref="tns:collectionAttr"/>
        </xs:complexType>
    </xs:element>
    <!--设置map节点-->
    <xs:element name="map" id="map">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="tns:entry" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:attributeGroup ref="tns:collectionAttr"/>
        </xs:complexType>
    </xs:element>
    <!--设置entry节点-->
    <xs:element name="entry" id="entry">
        <xs:complexType>
            <xs:attributeGroup ref="tns:entryAttr"/>
        </xs:complexType>
    </xs:element>

    <!--设置命名空间根节点-->
    <xs:element name="beans">
        <xs:complexType mixed="true">
            <xs:sequence maxOccurs="unbounded">
                <xs:element ref="tns:bean">
                    <xs:complexType>
                        <xs:sequence maxOccurs="unbounded">
                            <xs:element ref="tns:property">
                                <xs:complexType>
                                    <xs:sequence/>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>

            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

xml文件实现的结构

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.moon.org/simpleSpring/Schema/beans">
    <!--声明一个bean-->
    <bean id="" class="" scope="singleton" lazy-init="true" init-method="" destroy-method="">
        <!--注入value-->
        <property name="" value=""/>
        <!--注入ref-->
        <property name="" ref=""/>
        <!--注入list-->
        <property name="">
            <list value-type="">
                <value></value>
            </list>
        </property>
        <!--注入set-->
        <property name="">
            <set 以上是关于XML学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

android学习笔记34——ClipDrawable资源

关于读取XML文件代码学习笔记

XXE外部实体注入(XML External Entity Injection)学习笔记

DOM探索之基础详解——学习笔记

在Tomcat的安装目录下conf目录下的server.xml文件中增加一个xml代码片段,该代码片段中每个属性的含义与用途

学习笔记 链接