【问题标题】:How do I stop smooks from escaping ampersand?如何阻止 smooks 逃离 & 符号?
【发布时间】:2014-10-08 19:59:55
【问题描述】:

我有一个 CSV 到 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>

【问题讨论】:

    标签: java xml csv escaping smooks


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      来自 smooks 配置文件。

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

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

      【讨论】:

        猜你喜欢
        • 2012-09-14
        • 1970-01-01
        • 1970-01-01
        • 2017-04-05
        • 1970-01-01
        • 1970-01-01
        • 2017-02-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多