XSD:缺少元素的默认值

时间:2013-09-09 09:13:41

标签: xml xsd

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

<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。

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

此致

rambius

2 个答案:

答案 0 :(得分:17)

没有。 XSD没有规定。

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

对于属性,这是可能的,因为属性要简单得多。 元素的所有属性都有效地构成了一组无序的命名简单值。没有某种属性树(其中包含可变结构)附加到父元素。

但是对于元素而言,事情要复杂得多。 如果允许某些关于缺失元素的“默认”,那将导致很多歧义。例如,必须指定某种“默认内容”, 这将是一些自动引发的元素序列代替空虚... 当只有一些元素被明确指定而其他元素必须隐式地补充它们时(默认情况下),甚至会引发一些可能的“默认内容”。 .... 好吧,如果你进一步思考,事情变得令人难以置信的复杂。 那么就必须创建另一种语言!但出于什么目的?

答案 1 :(得分:0)

调用此功能

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