XML 枚举列表的属性验证
XML Attribute Validation from Enumeration List
我有一个 XML,我需要使用 XSD 在架构中使用枚举类型验证属性值。
样本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
更新:
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轻松验证它(注意列表的分隔符是space):
<Test StatusValue="X Y">
<TestXSD>TestXSD</TestXSD>
<xsd>xsd</xsd>
</Test>
我有一个 XML,我需要使用 XSD 在架构中使用枚举类型验证属性值。
样本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
更新:
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轻松验证它(注意列表的分隔符是space):
<Test StatusValue="X Y">
<TestXSD>TestXSD</TestXSD>
<xsd>xsd</xsd>
</Test>