2
我想做一些類似於XMLStreamReader的示例@BlaiseDoughan在他對JAXB filtered parsing的迴應中給出的,但是我需要根據子元素進行過濾決策,而不是基於當前節點屬性。使用XMLStreamReader和StreamFilter過濾出基於子元素的元素
XMLStreamReader沒有像XMLEventReader這樣的peek API。例如,我想將以下XML解組爲一個Gump對象,該對象的記錄列表最終只包含1個項目,其關聯名稱不以「Filtered-」開頭的記錄。
我使用的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<>();
}
}
日Thnx您的反饋。因此,採用這種方法,您建議聽衆已附加到Gump的解組,並且我認爲需要迭代和移除符合過濾標準的元素。如果這樣的方法覺得效率不高,那麼一個解決方案會在解組期間遇到流處理時將其丟棄/過濾掉。是這種情況還是我錯過了什麼? – NBW
@NBW - StAX是一種自頂向下的解析器,因此您無法根據子項排除父項,因爲您無權訪問子項。它們的表現歸結爲更快:「解組然後拋棄」vs「存儲查看它們然後應用它們的XML事件的過程」。 –
不錯,再次感謝。我正在試驗這個過程。 – NBW