读取复杂的xml文件

时间:2011-03-11 13:13:57

标签: spring-batch

我正在使用StaxEventItemReader尝试使用spring批量读取复杂的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。

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

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

1 个答案:

答案 0 :(得分:0)

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