0

我有一个 CSV to Java 配置文件,并且在其中一个字段中有一个 & 符号。当我转换为 Java bean 时,它会添加&到该字段中。

如何防止 smooks 这样做?

这是配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd"
    xmlns:csv="http://www.milyn.org/xsd/smooks/csv-1.1.xsd" xmlns:jb="http://www.milyn.org/xsd/smooks/javabean-1.1.xsd">
    <params>
        <param name="stream.filter.type">SAX</param>
        <param name="default.serialization.on">false</param>
        <param name="feature-off">http://apache.org/xml/features/scanner/notify-char-refs</param>
    </params>

    <csv:reader
        fields="Property,PropertyID,Unit#,FloorPlan, ReportingStatus, WorkType, Sub-Status, Subject, CurrentStep, Status, DenyCounter, RevisionCounter, MoveOutDate, BaselineOPSCommitPlan, PlannedOPSCommitPlan, ActualOPSCommitPlan, BaselineCSAcceptsPlan, PlannedCSAcceptsPlan, ActualCSAcceptsPlan, BaselineOPSCommitUnit, PlannedOPSCommitUnit, ActualOPSCommitUnit, BaselineCSAcceptsUnit, PlannedCSAcceptsUnit, ActualCSAcceptsUnit, BaselineCSTurnsUnit, PlannedCSTurnsUnit, ActualCSTurnsUnit, BaselineCommunityManagerAccepts, PlannedCommunityManagerAccepts, ActualCommunityManagerAccepts, BaselineRentReady, PlannedRentReady, ActualRentReady, Area, PreleaseMove-inDate"
        skipLines="1" separator=","/>

    <jb:bindings beanId="UpDownUnitList" class="java.util.ArrayList" createOnElement="csv-set">
        <jb:wiring beanIdRef="UpDownUnit" />
    </jb:bindings>

    <jb:bindings beanId="UpDownUnit" class="com.mycompany.beans.UpDownUnit" createOnElement="csv-record">
        <jb:value data="csv-record/Property" property="property" />
        <jb:value data="csv-record/PropertyID" property="propertyNumber" />
        <jb:value data="csv-record/Unit#" property="unitName" />
        ...
        ...
        ...
        <jb:value data="csv-record/Area" property="area" />
        <jb:value data="csv-record/PreleaseMove-inDate" decoder="com.mycompany.smooks.decoders.DateNullDecoder" property="preleaseMoveInDate">
            <jb:decodeParam name="format">MM.dd.yyyy</jb:decodeParam>
        </jb:value>
    </jb:bindings>
</smooks-resource-list>
4

2 回答 2

0

据我所知,Smooks 必须对字段值进行转义,因为它将输入流读取器数据转换为 SAX 事件流(即 XML)。我有一种感觉,您需要在字段值上应用某种 JavaBean 解码器(在适当的情况下将 & 转换回 &)。

于 2014-10-09T17:49:37.683 回答
0

我遇到了同样的问题。我可以通过删除来解决这个问题

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

来自 smooks 配置文件。

这是因为 SAX 流过滤器发生了这种转换。

如果您真的不需要 SAX 过滤器,即,如果您不期望大量数据,我认为您应该不使用 SAX 解析器。

于 2017-01-19T10:43:15.680 回答