XML-INTO在存在自关闭标记时失败



我在许多应用程序中成功地使用了xml,但有时web服务的xml答案是这样的:

<?xml version="1.0" encoding="utf-8"?>
<InfoLabel>
<Parcel>
<SiglaMittente>E3</SiglaMittente>
<NumeroSpedizione>800000009</NumeroSpedizione>
<TotaleColli>11</TotaleColli>
<TipoCollo />
<SiglaSedeDestino />
<DenominazioneMittente>GLS BOLOGNA</DenominazioneMittente>
<DenominazioneDestinatario>PROVA ETICHETTE</DenominazioneDestinatario>
<IndirizzoDestinatario>VIA XXX</IndirizzoDestinatario>
<CittaDestinatario>MILANO</CittaDestinatario>
<ProvinciaDestinatario>MI</ProvinciaDestinatario>
<DataSpedizione>03/03/20</DataSpedizione>
<DescrizioneSedeDestino>GLS Check</DescrizioneSedeDestino>
...other xml data..
</Parcel>
<Parcel>  
...other xml data..
</Parcel>
</InfoLabel>

其中不同之处在于自闭标签的存在(例如示例中的TipoCollo(。其他web服务通常同时返回内部为空白的打开和关闭标记。

当xml into被执行时,它会出现以下错误:

RNX0353 - The XML document does not match the RPG variable; reason code 8.

其中

8. The XML document contains data that cannot be successfully assigned to the RPG variable. The RPG status code associated with the failure is 105.  The exact subfield for which the error was detected is "infolabel.parcel(1).tipocollo"  

数据结构定义如下:

dcl-ds DsInfoLabel qualified inz;            
SiglaMittente          char(2) inz;          
NumeroSpedizione       zoned(9: 0) inz;      
TotaleColli            zoned(2: 0) inz;      
TipoCollo              zoned(1: 0) inz;      
SiglaSedeDestino       char(4) inz;          
... other fields...
end-ds;                                        
dcl-ds InfoLabel qualified inz;                
NumParcel int(10) inz;     
Parcel likeds(DsInfoLabel) dim(99);          
end-ds;           

这是操作代码:

xml-into(e) InfoLabel %xml(resmsg_DATA: xmlopts); 
where
xmlopts='doc=string trim=all case=any allowmissing=yes allowextra=yes path=InfoLabel countprefix=Num' 

系统运行的是V7R2版本。

据我所知,没有任何其他选择可以避免这种情况。此外,此web服务必须按原样使用。

我还能做什么吗?

是的,我找到了一个解决方法,它没有解释为什么,但通过这种方式可以毫无错误地检索数据:现在定义的是char,而不是分区的子字段TotaleColli。

谢谢

原来RPG状态105的意思是"字符到数字转换函数中的无效字符"。

因此,"解析器返回了一个无法转换为数字的值。在这种情况下,解析器正在重新调整一个空格,而%Dec(实际上是在幕后使用的(无法将空格转换为零。IBM被要求更改这一点,但目前我们仍在坚持。";这不是我的话:一位专家帮助了我。

解决方案是为可能未设置的数据定义字符字段。

相关内容

最新更新