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

Java 如何编写抑制具有特定属性值的元素的模式?,java,schema,jaxb,Java,Schema,Jaxb,我对JAXB比较陌生,但我有一个问题似乎很难通过在线文档解决。我的目标很简单:我有使用JAXB解析的XML,这样included=false的元素就不应该成为结果对象模型的一部分 我想在模式中解决这个问题: <complexType name="baseFilterType"> <simpleContent> <extension base="string"> <attribute type="string

我对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
都不会成为为
baseFilterType
对象生成的对象模型的一部分

您可以利用中的@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;
    }

}
@XmlRootElement
公共类BaseFiltersType{
私有列表过滤器;
@XmlPath(“过滤器[@include='true']”)
公共列表getFilter(){
回流过滤器;
}
public void setFilter(列表baseFilterType){
this.filter=baseFilterType;
}
}
对相关问题的回答

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

有关更多信息:


@Ryan Delucchi-在回答一个相关问题()时,我添加了一个使用StAX StreamFilter的示例。这意味着您无需进行任何模式或JAXB更改即可获得所需的behvaviour。太棒了,非常感谢!我想我最喜欢StreamFilter方法。简单是我在这项特殊任务中追求的目标。干杯