您可以在一个XMLStreamReader
所以要忽略的元素是不能报告为事件充分利用StAX的StreamFilter
。然后,您可以使用JAXB从XMLStreamReader
解组。
import javax.xml.bind.*;
import javax.xml.stream.*;
import javax.xml.transform.stream.StreamSource;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(HtmlTag.class);
XMLInputFactory xif = XMLInputFactory.newFactory();
StreamSource xml = new StreamSource("src/forum17613060/input.xml");
XMLStreamReader xsr = xif.createXMLStreamReader(xml);
xsr = xif.createFilteredReader(xsr, new StreamFilter() {
@Override
public boolean accept(XMLStreamReader reader) {
if(reader.isStartElement() || reader.isEndElement()) {
String localName = reader.getLocalName();
return !"span".equals(localName) && !"div".equals(localName);
}
return true;
}
});
Unmarshaller unmarshaller = jc.createUnmarshaller();
HtmlTag htmlTag = unmarshaller.unmarshal(xsr, HtmlTag.class).getValue();
System.out.println(htmlTag.h1);
}
}
...与afterUnmarshal()ok结合使用。 –