是否可以为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
答案 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'))