我在一台服务器上的空值验证失败时遇到了一些问题,但它适用于我的所有其他服务器。该问题出现在较新的 PHP 版本 (5.3.8) 上,并且适用于稍旧的版本 (5.2.4)。
以下是一些失败的孤立元素:
XML 输入:
<clbburnfuelbias></clbburnfuelbias>
<clbburntimebias></clbburntimebias>
XSD 验证:
<xs:element name="clbburnfuelbias" type="data-fuelbias"/>
<xs:element name="clbburntimebias" type="data-timebias"/>
<xs:simpleType name="data-fuelbias">
<xs:restriction base="xs:integer">
<xs:minInclusive value="-9900"/>
<xs:maxInclusive value="9900"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="data-timebias">
<xs:restriction base="xs:integer">
<xs:minInclusive value="-59"/>
<xs:maxInclusive value="59"/>
</xs:restriction>
</xs:simpleType>
错误:
错误 1824:元素“clbburnfuelbias”:该值不是原子类型“data-fuelbias”的有效值。错误 1824:元素“clbburntimebias”:该值不是原子类型
“data-timebias”的有效值。
在运行 5.2.4 的不同服务器上使用完全相同的输入和 XSD 文件我没有收到任何错误,并且 xml 是有效的。
我尝试将 minOccurs="0" 添加到元素中,我也尝试指定 nullable="true" 但仍然出现错误。
更新:
使用 PHP 5.2.4 在我的服务器上似乎忽略了空值,并使用 5.3.8 拒绝了空值。我使用的一种解决方法是使用两个定义的联合,一个用于整数类型,一个用于空值:
XSD:
<xs:element name="clbburnfuelbias" minOccurs="0">
<xs:simpleType>
<xs:union memberTypes="data-fuelbias null-string"/>
</xs:simpleType>
</xs:element>
<xs:simpleType name="data-fuelbias">
<xs:restriction base="xs:integer">
<xs:minInclusive value="-9900"/>
<xs:maxInclusive value="9900"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="null-string">
<xs:restriction base="xs:string">
<xs:length value="0"/>
</xs:restriction>
</xs:simpleType>