1

JDK 7 でトランスフォーマーを使用して XML を書き出しています。CDATA には次のように freemarker テンプレートがあります。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<fileExport append="false" automaticExport="false" automaticExportWithErrors="true" exportDir="C:\Users\bänn\Desktop" exportFileName="&lt;date&gt; &lt;time&gt; &lt;barcode&gt;" exportType="Excel" splitFiles="false">
  <exportTemplate><![CDATA[Date,RackBarcode,Row,Col,tubeBarcode,OrientationBarcode
<#list racks as rack>
<#list rack.containers as container>
${scandate?datetime},${rack.barcode},${container.textRow},${container.col + 1},${container.barcode},${rack.orientationBarcode}
</#list>
</#list>]]></exportTemplate>
  <scanTimeQuestionsTemplate><![CDATA[<#if scanTimeQuestionsEnabled>
Scan Time Questions

<#list scanTimeQuestions as question>
${question.shortName} : ${question.answer}
</#list>

</#if>]]></scanTimeQuestionsTemplate>
  <excelExportTemplate writeHeader="true">
    <excelExportColumn columnDataFormatting="d/M/yyyy HH:mm" columnDataFromString="DATETIME" columnHeader="Scan Time"/>
    <excelExportColumn columnDataFormatting="" columnDataFromString="RACK_BARCODE" columnHeader="Rack Barcode"/>
    <excelExportColumn columnDataFormatting="" columnDataFromString="ORIENTATION_BARCODE" columnHeader="Orientation Barcode"/>
    <excelExportColumn columnDataFormatting="" columnDataFromString="TUBE_ROW_TEXT" columnHeader="Tube Row"/>
    <excelExportColumn columnDataFormatting="" columnDataFromString="TUBE_COLUMN" columnHeader="Tube Column"/>
    <excelExportColumn columnDataFormatting="" columnDataFromString="TUBE_BARCODE" columnHeader="Tube Barcode"/>
    <excelExportColumn columnDataFormatting="d/M/yyy HH:mm:ss" columnDataFromString="DATETIME" columnHeader="Scan Datetime"/>
  </excelExportTemplate>
</fileExport>


</#if>

]]></scanTimeQuestionsTemplate>
  <excelExportTemplate writeHeader="false">
    <excelExportColumn columnDataFormatting="d/M/yyyy HH:mm" columnDataFromString="DATETIME" columnHeader="Scan Time"/>
    <excelExportColumn columnDataFormatting="" columnDataFromString="RACK_BARCODE" columnHeader="Rack Barcode"/>
    <excelExportColumn columnDataFormatting="" columnDataFromString="ORIENTATION_BARCODE" columnHeader="Orientation Barcode"/>
    <excelExportColumn columnDataFormatting="" columnDataFromString="TUBE_ROW_TEXT" columnHeader="Tube Row"/>
    <excelExportColumn columnDataFormatting="" columnDataFromString="TUBE_COLUMN" columnHeader="Tube Column"/>
    <excelExportColumn columnDataFormatting="" columnDataFromString="TUBE_BARCODE" columnHeader="Tube Barcode"/>
  </excelExportTemplate>
</fileExport>

ただし、Windowsコンピューターでこれを書き出すと、トランスフォーマーは出力されたCDATAに余分な \r を追加しているため、次のようになります。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<fileExport append="false" automaticExport="false" automaticExportWithErrors="false" exportDir="C:\Users\benn\Desktop" exportFileName="" exportType="text" splitFiles="false">
  <exportTemplate><![CDATA[Date,RackBarcode,Row,Col,tubeBarcode,OrientationBarcode

<#list racks as rack>

<#list rack.containers as container>

${scandate?datetime},${rack.barcode},${container.textRow},${container.col + 1},${container.barcode},${rack.orientationBarcode}

</#list>

</#list>

]]></exportTemplate>
  <scanTimeQuestionsTemplate><![CDATA[<#if scanTimeQuestionsEnabled>

Scan Time Questions



<#list scanTimeQuestions as question>

${question.shortName} : ${question.answer}

</#list>



</#if>

]]></scanTimeQuestionsTemplate>
  <excelExportTemplate writeHeader="false">
    <excelExportColumn columnDataFormatting="d/M/yyyy HH:mm" columnDataFromString="DATETIME" columnHeader="Scan Time"/>
    <excelExportColumn columnDataFormatting="" columnDataFromString="RACK_BARCODE" columnHeader="Rack Barcode"/>
    <excelExportColumn columnDataFormatting="" columnDataFromString="ORIENTATION_BARCODE" columnHeader="Orientation Barcode"/>
    <excelExportColumn columnDataFormatting="" columnDataFromString="TUBE_ROW_TEXT" columnHeader="Tube Row"/>
    <excelExportColumn columnDataFormatting="" columnDataFromString="TUBE_COLUMN" columnHeader="Tube Column"/>
    <excelExportColumn columnDataFormatting="" columnDataFromString="TUBE_BARCODE" columnHeader="Tube Barcode"/>
  </excelExportTemplate>
</fileExport>

したがって、基本的に \r\n は \r\r\n になっています - Xalan がこれを行っているというメッセージをいくつか見ましたが、バック エンジンとして JDK 7 が提供するものは何でも使用しています。誰かがこれを見たことがありますか?トランスフォーマーが私の CDATA に余分な改行を入れるのを止めるために設定できるプロパティはありますか?

4

1 に答える 1

1

私はいくつかの冗長な回避策を見てきました (「xalan newline」を検索してください)。

  1. ソースに Unix 行末のみがあることを確認します\n(エディター設定)。
  2. System.setProperty("file.encoding", "\n");

2. は醜いので、おそらく 1. で十分です。

于 2012-11-27T21:08:37.113 に答える