Ben*_*ton 2 php xml validation xsd
我有一个问题,空值在一台服务器上验证失败,但它适用于我所有其他服务器.问题发生在较新的PHP版本(5.3.8)上,适用于较旧的版本(5.2.4).
以下是一些失败的孤立元素:
XML输入:
<clbburnfuelbias></clbburnfuelbias>
<clbburntimebias></clbburntimebias>
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
错误:
错误1824:元素'clbburnfuelbias':该值不是原子类型'data-fuelbias'的有效值.错误1824:元素'clbburntimebias':该值不是原子类型
'data-timebias'的有效值.
在运行5.2.4的不同服务器上使用完全相同的输入和XSD文件我没有错误,xml有效.
我已经尝试将minOccurs ="0"添加到元素中,我已经尝试指定nullable ="true",但仍然会得到错误.
看来我的服务器上使用PHP 5.2.4忽略了空值,并使用5.3.8拒绝了.我使用过的建议是使用两个定义的并集,一个用于整数类型,另一个用于null值:
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>
Run Code Online (Sandbox Code Playgroud)
使元素可选(minOccurs="0")不会使其内容成为通配符.如果元素出现,则它必须与声明的类型匹配.
nillable="true"如果元素具有xsi:nil="true"属性,则使元素nillable()允许元素为空,其中xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance":
<clbburnfuelbias xsi:nil="true"></clbburnfuelbias>
<clbburntimebias xsi:nil="true"></clbburntimebias>
Run Code Online (Sandbox Code Playgroud)
您还可以使用联合类型,它仅具有相同的验证意义:
<xs:simpleType name="data-fuelbias">
<xs:union>
<xs:restriction base="xs:integer">
<xs:minInclusive value="-9900"/>
<xs:maxInclusive value="9900"/>
</xs:restriction>
<xs:restriction base="xs:string">
<xs:length value="0"/>
</xs:restriction>
</xs:union>
</xs:simpleType>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3572 次 |
| 最近记录: |