【问题标题】:XML Attribute Validation from Enumeration List枚举列表中的 XML 属性验证
【发布时间】:2017-01-24 08:26:01
【问题描述】:

我有一个 XML,我需要使用 XSD 在 Schema 中验证具有枚举类型的属性值。

示例 XML:

<Test StatusValue="X R,Y">
    <TestXSD>TestXSD</TestXSD>
    <xsd>xsd</xsd>
</Test>

以上我需要验证属性值 X 和 Y 是我的架构枚举列表的一部分。

Schema 中的枚举列表如下

   <xs:simpleType name="StatusGroup">
     <xs:restriction base="xs:string">
       <xs:enumeration value="X R"/>
       <xs:enumeration value="Y"/>
       <xs:enumeration value="Z"/>
       <xs:enumeration value="A"/>
       <xs:enumeration value="B"/>
       <xs:enumeration value="C"/>
       <xs:enumeration value="D"/>
       <xs:enumeration value="E"/>
     </xs:restriction>  
 </xs:simpleType>

由于两个值之间的逗号分隔,我无法验证值。 X, Y

【问题讨论】:

  • 更准确地说是什么问题?
  • 由于我的属性值用 分隔,我无法使用 enumlist 进行验证

标签: xml xsd schema xsd-validation


【解决方案1】:

更新:

OP说他不能改变xml和xsd,所以我们转向JAXB的XMLAdapter的解决方案:

public class Test {
  @XmlElement(name = "StatusValue")
  @XmlJavaTypeAdapter(StatusValueAdapter.class)
  public List<StatusGroup> getStatusValues(){}
}

public class StatusValueAdapter extends XmlAdapter<String, List<StatusGroup>> {
  public List<StatusGroup> unmarshal(String content) throws Exception {
    // content = "X R,Y"
    final String[] split = content.split(",");
    // validate here against your enum
  }
}

@XmlEnum 
public enum StatusGroup {}

更多:


你可以定义你StatusValue如下:

<xs:complexType name="Test">
    ...
    <xs:attribute name="StatusValue" type="StatusList" minOccurs="0" maxOccurs="1"/>
  </xs:complexType>

<xs:simpleType name="StatusList">
    <xs:list itemType="StatusGroup"/>
</xs:simpleType>

那么你可以通过jaxb轻松验证(注意list的分隔符是空格):

<Test StatusValue="X Y">
    <TestXSD>TestXSD</TestXSD>
    <xsd>xsd</xsd>
</Test>

【讨论】:

  • 对于我的属性值分隔符是 ','(逗号) 所以我无法验证上述情况
  • @Kumar_diru 你不能改变xsd定义和xml吗?如果你不能,我可能会更新我的答案。
  • 不,我不能删除 XSD 和 XML,更具体地说,我已经更新了 XML 和 XSD 枚举值
  • 我不知道 jaxb,我们不能通过 XSD 来实现吗?
  • @Kumar_diru 但是 xsd 只是定义了模式,你必须使用一些 lib/framework 在 xsd 的帮助下验证 xml。您不能只使用 xsd 来验证 xml。
猜你喜欢
  • 1970-01-01
  • 2020-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-08
相关资源
最近更新 更多