在可变大小的元素中仅限制XSD中的数字字符

时间:2010-09-15 22:16:50

标签: xml xsd

我有以下XML:

<customer>
  <name>John Paul</name>
  <cpf_cnpj>1376736333334</cpf_cnpj>
</customer>

<cpf_cnpj>元素的最小大小必须为11,最大大小为15,并且只能有数字(0到9之间)字符。我的XSD看起来像这样:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="customer">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="name" type="xs:string" minOccurs="1" maxOccurs="1" />
        <xs:element name="cpf_cnpj" minOccurs="1" maxOccurs="1">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:minLength value="11"/>
              <xs:maxLength value="15"/>
              <xs:pattern value="[0-9]{15}"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

我的问题是在xs:pattern节点上,我不知道该使用什么,因为尽管事实上我的minLenght为11且maxLenght为15,但由于{15},XML如果a的值大小为11到14,则不解析。
如何使用11到15之间的可变大小,并且仅为此节点强制执行数字字符?
TKS!

2 个答案:

答案 0 :(得分:4)

试试这个<xs:pattern value="[0-9]{11-15}"/>

修改

试试这个(更正):

<xs:pattern value="[0-9]{11,15}"/>

答案 1 :(得分:1)

我刚刚测试了以下模式

<xs:pattern value="[0-9]+" />

这对我有用。基本上,使用模式允许任意长度的数字,然后使用minLength和maxLength字符串来强制执行长度。

所以你的例子中的XSD将是:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="customer">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="name" type="xs:string" minOccurs="1" maxOccurs="1" />
        <xs:element name="cpf_cnpj" minOccurs="1" maxOccurs="1">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:minLength value="11"/>
              <xs:maxLength value="15"/>
              <xs:pattern value="[0-9]+"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>