java—如何使用jaxb2marshaller从xml中提取嵌套元素

kqhtkvqz  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(285)

我正在解析一个非常大的xml文件(>2gb),信息按以下方式排列。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Document>
    <CreditInfo>
        <HeaderInfo>
           <Name>Sample Value</Name>
        </HeaderInfo>
        <PaymentInfo>
            <value>100</value>
        </PaymentInfo>
        <PaymentInfo>
            <value>100</value>
        </PaymentInfo>
        <PaymentInfo>
            <value>100</value>
        </PaymentInfo>
        <PaymentInfo>
            <value>100</value>
        </PaymentInfo>
        <PaymentInfo>
            <value>100</value>
        </PaymentInfo>
        <PaymentInfo>
            <value>100</value>
        </PaymentInfo>
        <PaymentInfo>
            <value>100</value>
        </PaymentInfo>
        <OtherInfo>
            <value>something</value>
        </OtherInfo>
    </CreditInfo>
</Document>

我不想在内存中加载整个文档。我喜欢打一个电话去拿 HeaderInfo 然后去拿 PaymentInfo 一次一个,直到我到达文件的结尾。我正在使用 spring-oxm ```

org.springframework
spring-oxm

我当前的代码包含jaxb2marshaller配置

@Bean
Jaxb2Marshaller jaxb2Marshaller(){
Jaxb2Marshaller jaxb2Marshaller = new Jaxb2Marshaller();
jaxb2Marshaller.setPackagesToScan(
"com.sample.model"
);
return jaxb2Marshaller;
}

还有我的服务方法

@Service
public class ParsingService {

private final Jaxb2Marshaller jaxb2Marshaller;

public ParsingService(Jaxb2Marshaller jaxb2Marshaller) {
    this.jaxb2Marshaller = jaxb2Marshaller;
}

public JAXBElement<Document> getDocument(InputStream fileInputStream){
      return (JAXBElement<Document>) jaxb2Marshaller.unmarshal(new StreamSource(fileInputStream));
}

}

我试着给它添加其他方法 `getHeaderInfo` 以及 `PaymentInfo` 但这行不通。上面的方法对整个文档进行解组,我认为我不能将其存储在内存中。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题