使用XSD模式验证在XML中传递空值

时间:2017-08-04 09:40:40

标签: xml api xsd xsd-validation tibco

我尝试使用空InvestorID字段发送以下XML请求,但收到错误回复:

  

"模块不符合活动输出模式。初始值' '对于简单类型定义InvestorIDType"

无效
  <tns:Investor>
    <tns:InvestorId/>
    <tns:firstName>FirstName</tns:firstName>
    <tns:lastName>LastName</tns:lastName>
    <tns:dateOfBirth>1970-01-01</tns:dateOfBirth>
  </tns:Investor>

我的简单类型的模式值([0-9]{10})?是否允许空字段? (如下图所示)

<simpleType name="InvestorIDType">
    <restriction base="string">
        <pattern value="([0-9]{10})?" />
    </restriction>
</simpleType>

1 个答案:

答案 0 :(得分:0)

是的,模式值允许空字段。

原始文档成功验证了此模式(假设tns绑定到名称空间http://www.example.com):

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns="http://www.example.com"
  targetNamespace="http://www.example.com"
  elementFormDefault="qualified">
    <xs:simpleType name="InvestorIDType">
        <xs:restriction base="xs:string">
            <xs:pattern value="([0-9]{10})?" />
        </xs:restriction>
    </xs:simpleType>
    <xs:element name="Investor">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="InvestorId" type="InvestorIDType"/>
                <xs:element name="firstName" type="xs:string"/>
                <xs:element name="lastName" type="xs:string"/>
                <xs:element name="dateOfBirth" type="xs:date"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

但是,错误消息提到' ',它不是空的:它是一个包含一个空格字符的字符串。也许错误可能来自文件中的其他位置,如下所示:

<tns:InvestorId> </tns:InvestorId>