JAXB – 忽略元素

有没有办法忽略Jaxb解析中的元素? 我有一个大的XML文件,如果我可以忽略其中一个大的复杂元素,那么它可能会解析得更快。

如果甚至根本无法validation元素内容并解析文档的其余部分,即使该元素不正确,也会更好。

例如:这应该只生成Foo.element1和Foo.element2

 I want this And this  ALL of bar should be ignored this also should be ignored  a lot of C that take time to process   a lot of C that take time to process   a lot of C that take time to process   a lot of C that take time to process    

假设您的JAXB模型如下所示:

 @XmlRootElement(name="foo") public class Foo { @XmlElement(name="element1") String element1; @XmlElement(name="element2") String element2; @XmlElement(name="bar") Bar bar; } 

然后只需从Foo删除bar字段,就会跳过输入文档中的元素。

或者,使用@XmlTransient而不是@XmlElement注释该字段,并且也将跳过它。

JAXB将忽略任何未映射的属性。

实现明智(至少在EcliseLink JAXB(MOXy)中 ,我领导)。 当我们通过SAX解析器处理内容时(即输入是SAXSource),然后我们将负责构建对象的ContentHandler换成不对该部分进行处理的对象(org.eclipse.persistence.oxm.unmapped。 UnmappedContentHandler)。 当我们使用StAX解析器处理内容时,我们只是前进到下一个映射事件。

如果您拥有与该节点对应的属性,则可以使用@XmlTransient对其进行注释,以使其成为未映射的属性。

所有你需要它的标记字段为@XmlTransient(@XmlTransient注释应该隐藏不需要的字段)。 以下示例

JavaEE的:

 @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "DeletedIds") public class DeletedIds { @XmlElement(name = "DeletedId") private List id; @XmlTransient @XmlElement(name = "success") private String success; //getters&setters } @XmlAccessorType(XmlAccessType.FIELD) public class DeletedId { private int id; //getters&setters } 

XML:

   1   2   

您必须使用SAX解析器和有效“跳过”非兴趣节点的文档处理程序。 你无法绕过读取字节,但至少你可以绕过它们浪费额外的资源。

如果您的代码需要DOM树,那么您基本上使用生成DOM节点的SAX文档处理程序,但“跳过”不感兴趣的节点。 使用提供的DOM树生成器绝对不太方便,但是一个不错的权衡是你不能忍受不需要的节点的额外内存开销,但你需要DOM树。