1

Spring Batch 3.0.8.RELEASE を使用しています。CSVファイルの内容を読み込んでXMLに変換したい。私はSpring BatchでCSVファイルを読むことに慣れていますが、私が見た動作は「チャンク」指向の処理です....一度に1行であり、このデフォルトの動作がここでうまくいくかどうかはわかりません。

CSV サンプルは次のとおりです。

,WT4RT,AIG-00,694304F,9/1/2017,9/30/2017,"6,975.00",AIG-00201709,10/10/2017,USD,MC
,WT4RT,AIG-00,694317E,9/1/2017,9/30/2017,"2,583.80",AIG-00201709,10/10/2017,USD,MC
,WT4RT,AIG-00,694304G,9/1/2017,9/30/2017,"17,600.00",AIG-00201709,10/10/2017,USD,MC
,WT4RT,AIG-00,694304G,9/1/2017,9/30/2017,740,AIG-00201709,10/10/2017,USD,MC

このデータを次の XML 形式に変換する必要があります。

<?xml version="1.0" encoding="UTF-8"?>
<BillingAndCosting version="1.0">
    <ControlArea>
        <SenderId>CMS-BILLING-100</SenderId>
        <WaterMark>92030293829329392030232</WaterMark>
        <RecordCount>2</RecordCount>
        <TimeStamp>2001-12-17T09:30:47-05:00</TimeStamp>
        <DataFileName>String</DataFileName>
    </ControlArea>
    <DataArea>
        <CustomerAccount>
            <ExternalKey>1001</ExternalKey>
            <ExternalSource>HBVenture</ExternalSource>
            <BillingData>
                <ReferenceID>0</ReferenceID>
                <BillingInvoiceNumber>2000016</BillingInvoiceNumber>
                <BillingInvoiceDate>2017-01-31T06:42:07.000Z</BillingInvoiceDate>
                <BillingPeriodFromDate>2017-01-01T06:42:07.000Z</BillingPeriodFromDate>
                <BillingPeriodThruDate>2017-01-31T06:42:07.000Z</BillingPeriodThruDate>
                <BillingInvoiceType>NEW</BillingInvoiceType>
                <BillingAmount CurrencyID="USD">1290.39</BillingAmount>
                <InvoiceItem>
                    <CategoryCode>res-group</CategoryCode>
                    <TaxCategoryID>C2</TaxCategoryID>
                    <InvoiceItemAmount CurrencyID="USD">1290.39</InvoiceItemAmount>
                    <ProductID>694601F</ProductID>
                    <ISVUID>1</ISVUID>
                </InvoiceItem>
            </BillingData>
            <BillingData>
                <ReferenceID>0</ReferenceID>
                <BillingInvoiceNumber>2000017</BillingInvoiceNumber>
                <BillingInvoiceDate>2017-01-31T06:42:07.000Z</BillingInvoiceDate>
                <BillingPeriodFromDate>2017-01-01T06:42:07.000Z</BillingPeriodFromDate>
                <BillingPeriodThruDate>2017-01-31T06:42:07.000Z</BillingPeriodThruDate>
                <BillingInvoiceType>NEW</BillingInvoiceType>
                <BillingAmount CurrencyID="USD">590.39</BillingAmount>
                <InvoiceItem>
                    <CategoryCode>gateway_resource_group</CategoryCode>
                    <TaxCategoryID>C2</TaxCategoryID>
                    <InvoiceItemAmount CurrencyID="USD">590.39</InvoiceItemAmount>
                    <ProductID>694601F</ProductID>
                    <ISVUID>1</ISVUID>
                </InvoiceItem>
            </BillingData>

簡潔にするために、XML の一部のみを示しています。私が知らないのは、Spring Batch を使用して CSV ファイル全体を読み取り、XML マーシャラーに送信して XML に変換できるオブジェクトを作成する方法です。

Springバッチでそれを行うことはできますか、それとも「自分でロール」する必要がありますか?

4

2 に答える 2

0

StaxEventItemWriterItemWriter として使用します (以下の例)

<bean id = "xmlItemWriter" 
      class = "org.springframework.batch.item.xml.StaxEventItemWriter"> 
      <property name = "resource" value = "file:my_path_to_xml.xml" /> 
      <property name = "marshaller" ref = "reportMarshaller" /> 
      <property name = "rootTagName" value = "BillingAndCosting" /> 
   </bean>  

   <bean id = "reportMarshaller" 
      class = "org.springframework.oxm.jaxb.Jaxb2Marshaller">
      <property name = "classesToBeBound"> 
         <list> 
            <value>BillingAndCosting</value> 
         </list> 
      </property> 
   </bean>
于 2017-11-29T06:22:51.497 に答える