如何编写一个模式来抑制具有特定属性值的元素?

时间:2011-05-11 22:13:38

标签: java schema jaxb

我对JAXB比较陌生,但我有一个似乎很难通过在线文档解决的问题。我的目标很简单:我使用JAXB解析XML,这样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}}不会与为{{1}}对象生成的对象模型分开

1 个答案:

答案 0 :(得分:2)

您可以利用EclipseLink JAXB (MOXy)中的@XmlPath扩展名,我是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;
    }

}

回答相关问题

在我对相关问题的一个回答中,我演示了如何使用MOXy的@XmlPath注释,以及适用于任何JAXB实现的StAX StreamFilter方法:

更多信息: