JAXB应该忽略元素

JAXB应该忽略元素,jaxb,unmarshalling,Jaxb,Unmarshalling,结构 <html> <span><h1>test</h1></span> <table> </table> </html> 解组为空。您可以在XMLStreamReader上利用StAXStreamFilter,以便不将要忽略的元素报告为事件。然后,您可以使用JAXB从XMLStreamReader解组 @XmlAccessorType(XmlAccessType.FIELD)

结构

<html>
   <span><h1>test</h1></span>
   <table>

   </table>
</html>

解组为空。

您可以在
XMLStreamReader
上利用StAX
StreamFilter
,以便不将要忽略的元素报告为事件。然后,您可以使用JAXB从
XMLStreamReader
解组

@XmlAccessorType(XmlAccessType.FIELD)
public class HtmlTag 
{
    @XmlAnyElement
    List<org.w3c.dom.Element> elements;
}  
import javax.xml.bind.*;
导入javax.xml.stream.*;
导入javax.xml.transform.stream.StreamSource;
公开课演示{
公共静态void main(字符串[]args)引发异常{
JAXBContext jc=JAXBContext.newInstance(HtmlTag.class);
XMLInputFactory xif=XMLInputFactory.newFactory();
StreamSource xml=newstreamsource(“src/forum17613060/input.xml”);
XMLStreamReader xsr=xif.createXMLStreamReader(xml);
xsr=xif.createFiltereReader(xsr,新的StreamFilter(){
@凌驾
公共布尔接受(XMLStreamReader){
if(reader.isStartElement()| | reader.isEndElement()){
字符串localName=reader.getLocalName();
返回!“span”.equals(localName)&&!“div”.equals(localName);
}
返回true;
}
});
Unmarshaller Unmarshaller=jc.createUnmarshaller();
HtmlTag HtmlTag=unmarshaller.unmarshal(xsr,HtmlTag.class).getValue();
System.out.println(htmlTag.h1);
}
}

您可以在
XMLStreamReader
上利用StAX
StreamFilter
,以便不将要忽略的元素报告为事件。然后,您可以使用JAXB从
XMLStreamReader
解组

import javax.xml.bind.*;
导入javax.xml.stream.*;
导入javax.xml.transform.stream.StreamSource;
公开课演示{
公共静态void main(字符串[]args)引发异常{
JAXBContext jc=JAXBContext.newInstance(HtmlTag.class);
XMLInputFactory xif=XMLInputFactory.newFactory();
StreamSource xml=newstreamsource(“src/forum17613060/input.xml”);
XMLStreamReader xsr=xif.createXMLStreamReader(xml);
xsr=xif.createFiltereReader(xsr,新的StreamFilter(){
@凌驾
公共布尔接受(XMLStreamReader){
if(reader.isStartElement()| | reader.isEndElement()){
字符串localName=reader.getLocalName();
返回!“span”.equals(localName)&&!“div”.equals(localName);
}
返回true;
}
});
Unmarshaller Unmarshaller=jc.createUnmarshaller();
HtmlTag HtmlTag=unmarshaller.unmarshal(xsr,HtmlTag.class).getValue();
System.out.println(htmlTag.h1);
}
}

。。。结合afterUnmarshal()确定。。。。与afterUnmarshal()结合使用,可以。
@XmlAccessorType(XmlAccessType.FIELD)
public class HtmlTag 
{
    @XmlAnyElement
    List<org.w3c.dom.Element> elements;
}  
HtmlTag htmlTag = //...  
Element firstElement = htmlTag.elements.get(0); // this is first element,
                                        // currently it is <span>
firstElement.getElementsByTagName("h1").item(0).getTextContent(); // return 'test'