JAXB - 忽略元素

2022-09-01 11:39:21

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

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

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

<foo>
    <element1>I want this</element1>
    <element2>And this</element2>
    <bar>
       <a>ALL of bar should be ignored</a>
       <b>this also should be ignored</b>
       <c>
           <x>a lot of C that take time to process</x>
       </c>
       <c>
            <x>a lot of C that take time to process</x>
       </c>
       <c>
          <x>a lot of C that take time to process</x>
       </c>
      <c>
          <x>a lot of C that take time to process</x>
      </c>
  </bar>
</foo>

答案 1

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

@XmlRootElement(name="foo")
public class Foo {

   @XmlElement(name="element1")
   String element1;

   @XmlElement(name="element2")
   String element2;

   @XmlElement(name="bar")
   Bar bar;
}

然后,只需从中删除该字段即可跳过输入文档中的元素。barFoo<bar/>

或者,用 代替 来注释字段,它也将被跳过。@XmlTransient@XmlElement


答案 2

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

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

如果确实有一个与该节点对应的属性,则可以使用@XmlTransient对其进行批注,以使其成为未映射的属性。


推荐