使用XMLStreamReader和StreamFilter过滤基于子元素的元素

时间:2014-03-27 17:56:15

标签: xml jaxb eclipselink moxy

我想做一些类似于XMLStreamReader的例子@BlaiseDoughan在他对JAXB filtered parsing的回复中给出的但是我需要根据子元素而不是当前节点属性做出过滤决策。

XMLStreamReader没有像XMLEventReader那样的peek API。例如,我想将以下XML解组为Gump对象,其记录列表最终只包含1个项目,其关联名称不以&#34开头的记录;过滤 - "。

我正在使用Eclipselink 2.3.2v20111124-r10461

<gump>
    <foo>Some text</foo>
    <bar>1.245</bar>
    <records>
        <record>
            <name>Filtered-Counter</name>
            <value>1</value>
        </record>
        <record>
            <name>Golden</name>
            <value>shiny</value>
        </record>
    </records>
    <baz>1234</baz>
</gump>

Gump.java

@XmlRootElement(name = "gump")
@XmlAccessorType(XmlAccessType.FIELD)
public class Gump implements Serializable {

    private String foo;
    private String bar;
    private String baz;

    @XmlElementWrapper
    @XmlElement(name = "record")
    private List<Record> records;

    // .. Field getters/setters 

    public Gump() {
      records = new ArrayList<>();
    }
}

1 个答案:

答案 0 :(得分:2)

最简单的方法是做一个常规的unmarshal,然后使用一个unmarshal监听器来清理unmarshal事件后的集合。