我正在使用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结构?
我还没有看到如何实现这种处理。
答案 0 :(得分:0)
根据您的描述,您最好选择实施自己的custom ItemReader。内置的StaxEventItemReader仅支持单个fragmentRootElement,因为它是最常见的用例。