簡體   English   中英

XML-INTO 在存在自閉合標簽時失敗

[英]XML-INTO fails in presence of self-closing tag

我在許多應用程序中成功地使用了 xml-into,但有時 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 服務。

還有什么我可以做的嗎?

是的,我找到了一個解決方法,它沒有解釋為什么,但是這樣可以毫無錯誤地檢索數據:子字段 TotaleColli 現在被定義為字符而不是分區。

謝謝

事實證明,RPG 狀態 105 表示“字符到數字轉換函數中的字符無效”。

因此,“解析器正在返回一個無法轉換為數字的值。在這種情況下,解析器正在重新調整空格,而 %Dec(實際上在幕后使用)無法將空格轉換為零。IBM 已被要求更改這個,但現在我們堅持下去。"; 這不是我的話:一位專家幫助了我。

解決方案是為可能未設置的數據定義字符字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM