如何使用XSD定义选项元素的默认值?

lum*_*ric 4 xml xsd

我喜欢做什么:我想在架构中指定一个选项标签,例如:

<xsd:element name="my_element" type="my_type" minOccurs="0" maxOccurs="1"/>
Run Code Online (Sandbox Code Playgroud)

如果元素根本不发生,则此参数应该有一个默认值.当然,我可以在我的代码中定义这个默认值,它调用XML解析器.但我认为指定默认值的正确位置将在*.xsd模式文件中(因为默认值是模式定义的接口的一部分).

不幸的是,这似乎并不容易."default"属性具有不同的效果:"如果它没有出现则不提供;如果它出现并且为空,则其值为默认值"(来自http://www.w3.org/TR)/xmlschema-0 /#ref36).

我发现讨论此问题的其他链接:

有这个问题的解决方案吗?或者我应该放弃?

小智 5

简单元素可以具有默认值或指定的固定值.

如果未指定其他值,则会自动为该元素分配默认值.

在以下示例中,默认值为"red":

<xs:element name="color" type="xs:string" default="red"/>
Run Code Online (Sandbox Code Playgroud)

固定值也会自动分配给元素,您无法指定其他值.

在以下示例中,固定值为"红色":

<xs:element name="color" type="xs:string" fixed="red"/>
Run Code Online (Sandbox Code Playgroud)

  • 如果我在XML中添加一个没有值的元素,它可以有一个默认值.但我的问题是:如果元素在XML文件中根本不可用,我需要一个默认值.我用它来配置文件中的向后兼容性. (4认同)
  • @lumbric:您可以在架构中的元素上使用 `minOccurs=0` 属性,您将得到一个空值或 null 值,具体取决于解析器。但要获得“默认”值,该元素必须在没有其他值的情况下出现。对于如此广泛使用的语言来说,这是相当愚蠢和痛苦的缺点,但我们都必须处理这个问题。底线:在您的应用程序中处理它。 (2认同)