XSD的nillable="true"和minOccurs="0"有什么区别

admin 百科 7
nillable="true"要求元素必须存在但值可为空(需xsi:nil="true"),minOccurs="0"允许元素完全省略;二者可共用,支持存在非空、存在为空、不存在三种状态。

XSD的nillable="true"和minOccurs="0"有什么区别-第1张图片-佛山资讯网

nillable="true"minOccurs="0" 都用于处理“空”或“缺失”的情况,但它们作用的对象和语义完全不同:前者管的是值是否可为空,后者管的是元素是否可省略

nillable="true":元素必须出现,但值可以为空

当设置 nillable="true" 时,XML 中该元素必须存在,只是它的内容可以显式标记为 null。要表示空值,必须带上 xsi:nil="true" 属性,并且不能有子内容或文本值。

  • 合法写法:
  • 非法写法:<price></price>(这是空标签,不等于 nil)或 <price></price>(空内容 ≠ nil)
  • 典型用途:保持 XML 结构完整,比如在数组、表格行、SOAP 消息中需要占位但值未知的字段

minOccurs="0":元素本身可以完全不出现

当设置 minOccurs="0" 时,该元素在 XML 文档中可以彻底省略,不会出现在序列里。它不关心值是否为空,只控制元素是否存在。

  • 合法写法:整个 <price>...</price> 标签都不出现
  • 如果它出现了,就必须有合法值(除非同时设了 nillable="true"
  • 典型用途:定义可选字段,兼容旧版本接口,或表达“这个信息当前不提供”

两者可以同时使用

常见组合是 minOccurs="0" nillable="true",这意味着:该元素可有可无;如果出现,还可以是 nil。

标签: java 区别 red

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~