1

我正在尝试使用StaxEventItemReader使用 Spring Batch 读取复杂的 XML 文件。处理简单结构时,这不是问题。但是,我必须处理这种 XML 文件:

<?xml version="1.0" encoding="UTF-8"?>
<PivotContrat xsi:noNamespaceSchemaLocation="PivotContrat.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Emetteur>
        <Id>String</Id>
        <Nom>String</Nom>
    </Emetteur>
    <Recepteur>
        <Id>String</Id>
        <Nom>String</Nom>
    </Recepteur>
    <Compteurs>text</Compteurs>
    <IndicateurVide>String</IndicateurVide>
    <Policy>
        <Identifiant>
            <Id>String</Id>
        </Identifiant>
        <Evenement>
            <Id>String</Id>
            <Origine>String</Origine>
            <User>String</User>
            <Dates>
                <DateEvt>1967-08-13</DateEvt>
                <DateEffetDebut>1967-08-13</DateEffetDebut>
                <DateEffetFin>1967-08-13</DateEffetFin>
            </Dates>
        </Evenement>
        <Statut>
            <Code>String</Code>
            <DateEffet>1967-08-13</DateEffet>
            <StatutPrec>1967-08-13</StatutPrec>
        </Statut>
        <Produit>
            <Id>String</Id>
        </Produit>
        <Distributeur>
            <Id>String</Id>
        </Distributeur>
        <Producteur>
            <Id>String</Id>
        </Producteur>
        <Client>
            <Id>String</Id>
        </Client>
        <DateSouscription>1967-08-13</DateSouscription>
        <Periodicite>0</Periodicite>
        <Montant>3.14159265358979E0</Montant>
        <Duree>0</Duree>
        <ReferencesBancaire>
            <RIB>String</RIB>
        </ReferencesBancaire>
        <GarantiesSouscrites>
            <Id>String</Id>
        </GarantiesSouscrites>
    </Policy>
</PivotContrat>

第一个节点是某种标题。(Emetteur、Recepteur 等......)

策略节点是一个集合,可能非常大。

我的问题是我只能定义 1 个 fragmentRootElementName,在这种情况下,它不能是卷问题的真正根 PivotContrat。

我需要读取每个 1 级节点以将它们编组到适当的对象中(使用 JAXB 编组器)。

有什么方法可以使用多个 fragmentRootElementName?
有没有其他方法可以使用这个 XML 结构?
我还没有看到如何实现这种处理。

4

1 回答 1

0

根据您的描述,听起来您最好的选择是实现您自己的自定义 ItemReader。内置的StaxEventItemReader仅支持单个 fragmentRootElement,因为它是最常见的用例。

于 2011-09-07T09:28:42.300 回答