11

是否可以为 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 的默认值。

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

问候

兰比乌斯

4

2 回答 2

24

不,XSD 不提供。

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

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

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

于 2013-09-09T10:58:33.400 回答
-1

调用这个函数

def _get_(x):
  if x is not None:
     return(x.text)
  else:
    # print('Setting Blank')
     return ''
_get_(parent.find('childtag'))
于 2019-09-17T17:34:41.907 回答