我是 BeanIO 的新手。我在处理下面的输入 xml 文件时遇到问题,因为它在 TrackAndTrace 属性中包含 &:
<ROOT>
<Sender>
<Provider>
<Data>
<Item SendingID="001111" ItemID="4111111" TrackAndTrace="https://www.xyz.ch/EasySearch.do?fCodes=9946;&lang=fr"/>
</Data>
</Provider>
</Sender>
</ROOT>
我的 beanio xml 如下所示:
<stream name="test" format="xml" xmlName="ROOT">
<record name="shippingData" xmlName="Sender" class="com.comp.eventr.data.ShipDataDO">
<segment name="Provider">
<segment name="Data">
<segment name="Item">
<field name="tNumber" xmlName="IdentCode" xmlType="attribute"></field>
</segment>
<segment name="shippingDetail" xmlName="Item" xmlType="element" class="com.comp.eventr.data.ShipDetailDO">
<field name="eCode" xmlName="EventNumber" xmlType="attribute"></field>
<field name="eDate" xmlName="EventDateTime" xmlType="attribute"></field>
<field name="eName" xmlName="EventDescription" xmlType="attribute"></field>
</segment>
</segment>
</segment>
</record>
</stream>
处理文件的代码如下:
protected StreamFactory factory;
protected BeanReader in = factory.createReader(carrier, new InputStreamReader(new FileInputStream(file)));
while ((shippingDataDO = (ShippingDataDO) in.read()) != null) {
//some code goes here
}
如果在输入 xml 文件中 & 被 url 编码值 %26 替换,则相同的代码可以正常工作。请让我知道如何在 beanio 的情况下进行 URL 编码。
<ROOT>
<Sender>
<Provider>
<Data>
<Item SendingID="001111" ItemID="4111111" TrackAndTrace="https://www.xyz.ch/EasySearch.do?fCodes=9946;%26lang=fr"/>
</Data>
</Provider>
</Sender>
</ROOT>
我尝试的代码如下,但没有帮助:
protected BeanReader in = factory.createReader(carrier, new InputStreamReader(new FileInputStream(file), Charset.forName("UTF-8")));
和
protected BeanReader in = factory.createReader(carrier, new InputStreamReader(new FileInputStream(file), StandardCharsets.ISO_8859_1));