XML详解

XML(可扩展标记语言)是一种用于结构化数据存储、网络传输和配置文件的标准化语言。它具有平台无关性和自定义内容的特点,常用于替代数据库、数据包和.properties文件。XML文件包含根节点、遵循严格的语法,并可通过CDATA区域处理特殊字符。此外,DTD(文档类型定义)和XSD(XML Schema)文件用于定义XML文件的结构和内容约束,确保数据的一致性和准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 value-type="">
                <ref></ref>
            </set>
        </property>
        <!--注入map-->
        <property name="">
            <map value-type="">
                <entry key="" value=""/>
                <entry key="" value-ref=""/>
            </map>
        </property>
    </bean>
</beans>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值