我有一點空值的一臺服務器上驗證失敗的問題,但它的作品我的所有其他服務器上。這個問題發生在一個更新的PHP版本(5.3.8)上,並且適用於稍舊的版本(5.2.4)。爲什麼我的xml無法通過XSD進行驗證?
這裏有幾個其中失敗隔離元件的:
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>
錯誤:
Error 1824: Element 'clbburnfuelbias': The value is not a valid value of the atomic type 'data-fuelbias'. Error 1824: Element 'clbburntimebias': The value is not a valid value of the atomic type
'data-timebias'.
使用的確切小號ame輸入和運行5.2.4的不同服務器上的XSD文件我沒有遇到任何錯誤,並且xml有效。
我曾嘗試加入的minOccurs =「0」的元素,我已經試過指定可空=「真」,以及,但仍然得到了錯誤。
UPDATE:
看來,空值,則使用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>
謝謝你的回答。我認爲不應該允許使用該模式的空值,但奇怪的是它在其他版本的PHP上工作。僅供參考我已經更新了我的答案,以包含格式正確的聯合聲明。謝謝! –