0

おおよそ次のようなxmlファイルがあります。

<batch>
    <header>
        <headerStuff />
    </header>
    <contents>
        <timestamp />
        <invoices>
            <invoice>
                <invoiceStuff />
            </invoice>
            <!-- Insert 1000 invoice elements here -->
        </invoices>
    </contents>
</batch>

そのファイルを、同じ headerStuff と 1 つの請求書だけを持つ 1000 個のファイルに分割したいと思います。Smooks のドキュメントは、変換の可能性を非常に誇りに思っていますが、残念ながら、私はそれらを実行したくありません。

これを行う方法を考え出した唯一の方法は、freemarker で構造全体を繰り返すことです。しかし、それは構造を不必要に繰り返すような気がします。ヘッダーには約 30 の異なるタグがあるため、多くの作業も必要になります。

私が現在持っているのはこれです:

<?xml version="1.0" encoding="UTF-8"?>
<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd"    
    xmlns:calc="http://www.milyn.org/xsd/smooks/calc-1.1.xsd"
    xmlns:frag="http://www.milyn.org/xsd/smooks/fragment-routing-1.2.xsd"
    xmlns:file="http://www.milyn.org/xsd/smooks/file-routing-1.1.xsd">

    <params>
        <param name="stream.filter.type">SAX</param>
    </params>

    <frag:serialize fragment="INVOICE" bindTo="invoiceBean" />

    <calc:counter countOnElement="INVOICE" beanId="split_calc" start="1" />

    <file:outputStream openOnElement="INVOICE" resourceName="invoiceSplitStream">
        <file:fileNamePattern>invoice-${split_calc}.xml</file:fileNamePattern>
        <file:destinationDirectoryPattern>target/invoices</file:destinationDirectoryPattern>
        <file:highWaterMark mark="10"/>
    </file:outputStream>

    <resource-config selector="INVOICE">
        <resource>org.milyn.routing.io.OutputStreamRouter</resource>
        <param name="beanId">invoiceBean</param>
        <param name="resourceName">invoiceSplitStream</param>
        <param name="visitAfter">true</param>
    </resource-config>

</smooks-resource-list>

これにより、請求書タグごとにファイルが作成されますが、そこから続行してファイルにもヘッダーを取得する方法がわかりません。

編集:

ソリューションは Smooks を使用する必要があります。アプリケーションで汎用スプリッターとして使用し、さまざまな種類の入力ファイルに対してさまざまな smooks 構成ファイルを作成するだけです。

4

2 に答える 2

1

私はSmooksから始めたばかりです。しかし...あなたの問題はこれと同じように聞こえます:http ://www.smooks.org/mediawiki/index.php?title = V1.5:Smooks_v1.5_User_Guide#Routing_to_File

全体として出力FTL形式を提供する必要があります。これは、私が推測する汎用ツールを使用することの欠点です。データマッピングには、冗長性のように感じるものが多く含まれていることがよくあります。これを回避する1つの方法は、規則を活用することですが、それをフレームワークに組み込む必要があります。

于 2012-04-24T12:15:56.583 に答える
0

スモークはわかりませんが、(パフォーマンスが低い)最も簡単な解決策は(N番目のファイルを作成する)です。

  • xml構造全体をコピーします
  • N番目以外のすべての請求書タグを削除します

私はスモークでそれを行う方法を知りません、それはただのアイデアです。この場合、フリーマーカーテンプレートでxmlの構造を複製する必要はありません。

于 2012-03-01T15:10:40.410 に答える