2017-01-24 7 views
0

私はXSDを使用してスキーマの列挙型で属性値を検証する必要があるXMLを持っています。列挙型リストからのXML属性の妥当性チェック

サンプルXML:I上記

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

属性は、XとYは、スキーマの私の列挙リストの一部である値を確認する必要があります。私は理由は2つの値の間にコンマ分離の値を検証することはできませんよ

<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

+0

もっと正確に何が問題なの? – potame

+0

私の属性値がで区切られているので、enumlist –

答えて

0

更新:

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で簡単に確認できます。

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

で検証できません。属性値の区切り文字は '、'(カンマ)ですので、上記のシナリオを検証できませんでした。 –

+0

@Kumar_diru xsd定義とXML?できない場合、私は自分の答えを更新するかもしれません。 – Tony

+0

いいえXSDとXMLを削除できません。より具体的には、XMLとXSD列挙値を更新しました。 –

関連する問題