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学习笔记的主要内容,如果未能解决你的问题,请参考以下文章
XXE外部实体注入(XML External Entity Injection)学习笔记
在Tomcat的安装目录下conf目录下的server.xml文件中增加一个xml代码片段,该代码片段中每个属性的含义与用途