如何阻止sm to逃离&符号?

时间:2014-10-08 19:59:56

标签: java xml csv escaping smooks

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

我可以阻止sm !!这样做吗?

这是配置文件:

<?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>

2 个答案:

答案 0 :(得分:0)

据我所知,Smooks必须逃避字段值,因为它将输入流读取器数据转换为SAX事件流(即XML)。我有一种感觉,你需要在字段值上应用某种类型的JavaBean解码器(将&amp; back转换为&amp; where)。

答案 1 :(得分:0)

我遇到了同样的问题。我可以通过删除

来解决这个问题
<param name="stream.filter.type">SAX</param>
来自smooks配置文件的

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

如果你真的不需要SAX过滤器,即如果你不想要大数据我认为你应该没有使用SAX解析器。