XSD即XML Schema Definition,是用来定义XML文档结构和数据类型的规范,其中的default属性是配置元素默认值的核心属性,它专门为XML元素节点指定当该元素没有显式设置内容时的默认取值。

XSD default属性的基本作用
在XSD的元素定义中,default属性仅适用于简单类型的元素节点,它的作用是声明该元素的默认内容值。当XML实例文档中对应的元素没有包含任何子内容或文本值时,XML解析器会自动用default指定的值填充该元素的内容。
需要注意,default属性仅对简单类型元素生效,复杂类型元素无法使用这个属性,因为复杂类型元素通常包含子元素或属性,不存在单一的默认内容值。
default属性的使用示例
下面先定义一个包含default属性配置的XSD文件,定义一个用户信息的元素,其中年龄元素设置了默认值:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.ippipp.com/user"
xmlns="http://www.ippipp.com/user"
elementFormDefault="qualified">
<xs:element name="user">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="age" type="xs:int" default="18"/>
<xs:element name="city" type="xs:string" default="北京"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
上述XSD中,age元素的default设置为18,city元素的default设置为北京。接下来看对应的XML实例文档的不同写法:
<!-- 写法1:age元素没有内容 -->
<user xmlns="http://www.ippipp.com/user"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.ippipp.com/user user.xsd">
<name>张三</name>
<age></age>
<city>上海</city>
</user>
<!-- 写法2:age元素完全不出现 -->
<user xmlns="http://www.ippipp.com/user"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.ippipp.com/user user.xsd">
<name>李四</name>
<city>广州</city>
</user>
<!-- 写法3:age元素显式设置内容 -->
<user xmlns="http://www.ippipp.com/user"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.ippipp.com/user user.xsd">
<name>王五</name>
<age>20</age>
<city></city>
</user>
解析上述三个XML文档时,结果如下:
- 写法1中age元素有标签但无内容,解析后age的值为18,city的值为上海
- 写法2中age元素未出现,解析后age的值仍为18,city的值为广州
- 写法3中age显式设置为20,解析后age的值为20,city未设置内容,值为默认的北京
default属性的注意事项
和fixed属性的区别
fixed属性同样可以设置元素的取值,但是fixed是强制固定值,元素内容必须和fixed设置的值一致,否则XML校验会失败,而default只是默认值,允许元素显式设置其他合法的值。
和属性节点的default区别
XSD中不仅元素可以设置default,属性节点也可以设置default,但是二者的作用对象不同:元素的default指定的是元素的内容默认值,属性的default指定的是当属性未出现在元素中时的默认取值。
数据类型限制
default属性设置的值必须符合元素声明的数据类型,比如age元素声明为xs:int类型,default设置为18是合法的,如果设置为abc就会在XSD校验阶段报错。
常见问题解答
为什么复杂类型元素不能用default?
复杂类型元素包含子元素、属性等结构,没有单一的文本内容,因此无法用default指定默认内容,如果需要复杂类型元素的默认值,通常需要通过应用层的逻辑处理,而不是XSD的default属性。
default属性能和nillable一起使用吗?
可以一起使用,当元素设置nillable="true"且值为nil时,即使有default属性,元素的值也会是nil,不会使用默认值,nil的优先级高于default。
XSDdefault_属性XML元素默认值修改时间:2026-06-14 04:39:15