XSD:缺失元素的默认值

  • 本文关键字:默认值 元素 XSD xml xsd
  • 更新时间 :
  • 英文 :


是否可以为 XML 架构中缺少的元素定义默认值。我有以下代码片段:

<xs:element name="protocol" nillable="false" minOccurs="0" default="ftp">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:enumeration value="ftp"/>
      <xs:enumeration value="webdav"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

如果我在 XML 文件中有

<protocol>ftp</protocol>

<protocol>webdav</protocol>

它验证并我获得正确的值。如果我在 XML 文件中有

<protocol></protocol>

它还验证并获取 ftp 的默认值。

我的搜索显示,当属性缺失时,默认属性值适用,默认元素值在元素为空时应用。是否可以为缺少的元素设置默认值?

问候

兰比乌斯

No.XSD 不提供这一点。

您可以指定元素的默认值。但是一旦它丢失(当其父级的内容模型允许时),对该元素的任何请求都将返回空字符串或 null(或只是一个错误)。缺少的元素是不存在的元素!

对于属性,这是可能的,因为属性要简单得多。元素的所有属性实际上构成了一组无序的命名简单值。没有某种属性树(带有变量结构)附加到父元素。

但对于元素,事情要复杂得多。如果允许有关缺失元素的"默认"内容,则会导致很多歧义。例如,必须指定某种"默认内容",这将是一些自动唤起的元素序列,而不是空虚......甚至当只显式指定某些元素而其他元素必须隐式补充它们(默认情况下)时,每个内容都会被调用许多可能的"默认内容"。....好吧,如果你进一步思考,事情变得越来越复杂。那时必须创建另一种语言!但目的是什么?

调用此函数

def _get_(x):
  if x is not None:
     return(x.text)
  else:
    # print('Setting Blank')
     return ''
_get_(parent.find('childtag'))

最新更新