Как мне написать схему, которая подавляет элементы с определенным значением атрибута? - PullRequest
2 голосов
/ 12 мая 2011

Я относительно новичок в JAXB, но у меня есть вопрос, который, похоже, трудно решить с помощью онлайн-документации.Моя цель проста: у меня есть XML, который анализируется с использованием JAXB, так что элементы, где included=false не должны быть частью результирующей объектной модели.

Я хотел бы решить эту проблему в схеме:

<complexType name="baseFilterType">
    <simpleContent>
        <extension base="string">
            <attribute type="string" name="code" use="required"/>
            <attribute type="boolean" name="isMandatory" default="false"/>
            <attribute type="boolean" name="included" default="true"/>
        </extension>
    </simpleContent>
</complexType>

<complexType name="baseFiltersType">
    <sequence>
        <element type="rptt:baseFilterType" name="filter" maxOccurs="unbounded" 
          minOccurs="0" />
    </sequence>
</complexType>

Итак, как мне изменить схему, показанную выше, так, чтобы любая baseFilterType, где included = false не была отделена от объектной модели, сгенерированной для baseFiltersType объекта .

1 Ответ

2 голосов
/ 12 мая 2011

Вы можете использовать расширение @XmlPath в EclipseLink JAXB (MOXy) , я технический лидер MOXy.

@XmlRootElement
public class BaseFiltersType {

    private List<BaseFilterType> filter;

    @XmlPath("filter[@included='true']")
    public List<BaseFilterType> getFilter() {
        return filter;
    }

    public void setFilter(List<BaseFilterType> baseFilterType) {
        this.filter = baseFilterType;
    }

}

Ответ на связанный вопрос

В одном из моих ответов на связанный вопрос я демонстрирую, как использовать аннотацию @XmlPath MOXy и подход StAX StreamFilter, который будет работать с любой реализацией JAXB:

Для получения дополнительной информации:

...