【问题标题】:xsd pattern for comma seperated list of single character用于逗号分隔的单个字符列表的 xsd 模式
【发布时间】:2016-06-14 19:45:47
【问题描述】:

我在下面的 xsd 架构中遇到问题如何将逗号分隔的字符串限制为像这样的一个字符

    <status>A,B,C,D</status> 

目前我正在使用下面的代码来创建逗号分隔的字符串列表。

    <xs:simpleType name="order">
<xs:annotation>
  <xs:documentation>
  Comma-separated list of anything
  </xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
  <xs:pattern value="[^,]+(,\s*[^,]+)*"/>
</xs:restriction>

【问题讨论】:

    标签: list xsd schema comma


    【解决方案1】:

    使用

        <xs:element name="status">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:pattern value="((([A-Z][,]+)+)([A-Z]?))|([A-Z]))"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
    

    验证:

      <status>A</status>
      <status>A,</status>
      <status>A,B</status>
      <status>A,B,C,D</status>
      <status>A,B,C,D,</status>
    

    避免

      <status>AA</status>
      <status>AA,</status>
      <status></status>
      <status>AAAA,BBBB,CCCC,DDDD,</status>
    

    【讨论】:

    • 感谢您的解决方案,它运行良好,但在一种情况下,它应该像逗号一样工作,最后不应该是强制性的,请更新 'A,B
    • 感谢兄弟的快速回复我已经更新了你的回复,如果列表只有一个项目没有逗号,那么它应该是这样的 (([A-Z][,]?) +)([A-Z]?)) 请更新并验证我的更改。
    • 是的,验证 AA、A、BA 是正确的,B, 以及
    • :( 现在这个模式 (([A-Z][,]?)+)([A-Z]?)) 也接受多个字符,如 AAA,BBB,CCC 请检查这个案例我尝试了很多模式。请更新这是唯一需要处理的情况
    • 请分享您所有需要处理的类型以方便处理。
    【解决方案2】:

    类似于Navin Rawat's answer,只是不同(更简单)的正则表达式:

    <xs:element name="status">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:pattern value="[A-Z](,[A-Z])*"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    

    【讨论】:

      【解决方案3】:

      虽然@Navin Rawat的回答允许使用逗号,它可能 不是最好/最@987654324 @解决你的问题。

      "更好的"解决方案是使用XML list,如以下架构代码:

      <xs:schema>
      <xs:simpleType name="character">
        <xs:restriction base="xs:string">
          <xs:maxLength value="1" />
        </xs:restriction>
      </xs:simpleType>
      <xs:simpleType name="order">
        <xs:annotation>
          <xs:documentation>
          Space-separated list of single characters
          </xs:documentation>
        </xs:annotation>
        <xs:list itemType="character" />
      </xs:simpleType>
      </xs:schema>
      

      如您所见,它使用xs:restriction,而不是正则表达式来强制每个字符串的长度为 1。唯一的缺点是它要求字符串被空格分隔,而不是逗号分隔。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多