2017-01-24 12 views
0

У меня есть XML, где мне нужно проверить значения атрибутов с помощью типа Enumeration в Schema с помощью XSD.Проверка атрибута XML из списка перечислений

Пример XML:

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

Выше мне нужно проверить значение атрибутов X и Y является частью моего списка перечисления из схемы.

Список Перечисления в схеме, как показано ниже

<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

Поскольку мое значение атрибута разделено, я не могу проверить с помощью перечисления –

ответ

0

Update:

OP говорит, что он не может изменить XML и XSD, поэтому мы переходим к решению по XMLAdapter из JAXB:

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 (обратите внимание на Seperator списка пространство):

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

. Для разделителя значений атрибутов атрибута «,» («Запятая»), поэтому я не смог выполнить проверку выше сценария –

+0

@Kumar_diru Невозможно изменить xsd определение и xml? Если вы не можете, я могу обновить свой ответ. – Tony

+0

Нет, я не могу удалить XSD и XML. Чтобы быть более конкретным, я обновил значения перечисления XML и XSD –