多个电子邮件收件人的XML架构

时间:2015-05-26 18:14:12

标签: regex xml xsd email-address

我需要一个示例XSD来支持新元素中的多个电子邮件收件人。我要求每个收件人电子邮件地址位于不同的元素中任何人都可以帮我解释一下吗?

示例

<EmailReceipts> 
    <address1></address1>
    <address2></address2>
</EmailReceipts>

1 个答案:

答案 0 :(得分:1)

首先,我建议不要在address元素中嵌入索引编号:

<EmailReceipts> 
  <address>john@example.com</address>
  <address>mary@example.org</address>
</EmailReceipts>

然后,此XSD将验证上述XML(以及具有其他address元素的其他XML文档):

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="EmailReceipts">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="address" maxOccurs="unbounded" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

上面的XSD将允许address元素的任何字符串内容。如果您想更加严格,可以使用正则表达式来限制address的值:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="EmailReceipts">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="address" maxOccurs="unbounded" type="EmailAddressType"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:simpleType name="EmailAddressType">
    <xs:restriction base="xs:string">
      <xs:pattern value="([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

请注意,上述正则表达式one可能many,每个正则表达式具有syntax that is more involved than you might imagine的不同程度的通用性和特异性。