You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RPGLE中XML-INTO读取XML至数据结构失败问题求助

RPG读取XML到数据结构失败:子字段提示“Identifier does not exist”

问题现象

首次开发RPG程序读取XML数据至数据结构,但数据无法存入DS,查看子字段时提示“Identifier does not exist”。

示例XML片段

<?xml version="1.0" encoding="ISO-8859-1"?> 
<PRINTING> 
<HDR CW_DEPT_CD="736" CW_FILE_ID="W105B22355001" 
 CW_UNIT_CD="D736" BANK_ACCT_CD="GA" PYMT_DT="12/12/2022" 
 PROC_DT="12/12/2022" CHK_FRMT="GENZ" CHK_FRMT_DSCR="Generic Z-Fold" 
 DISB_CAT="SAM" DISB_CAT_DSCR="Sealed Agency Mailed" 
 DISB_HDLG_CD="null" DISB_HDLG_DSCR="null" STD_TXT="null" 
 BANK_ACCN_NO="936836402" BANK_NO="083000137" 
 DEPT_NM="Department For Community Based Services" 
 UNIT_NM="Department for Community Based Services" PERMIT_NO="null" 
 CNTAC_CD="76" EXTR_AD_1="ATTN: DAFM/TWIST" 
 EXTR_AD_2="275 East Main Street 3W-C" EXTR_AD_3="null" 
 EXTR_CITY="Frankfort" EXTR_ST="KY" ST_NM="null" EXTR_ZIP="40621" 
 EXTR_CTRY="null" EXTR_EMAIL_AD="null" PH_NO="502-564-3427" 
 PH_EXT="null" FAX_NO="null" />
</PRINTING>

程序代码片段

dcl-ds HDR DIM(10) Qualified;
    CW_DEPT_CD char(4);         
    CW_FILE_ID  char(20);       
    CW_UNIT_CD  char(4);        
    BANK_ACCT_CD  char(4); ...more fields 

    dcl-ds PYMT_LINE;       
        LN_NO      char(6);    
        VEN_CUST_CD   char(20);
        LGL_NM    char(60);  ... more fields
    end-ds PYMT_LINE;                     
                                        
end-ds HDR;      
Eval options = 'path=PRINTING/HDR/PYMT_LINE +                     
                case=any +                                
                allowextra=yes +                          
                allowmissing=yes +                        
                doc=file +                                
                datasubf=value';                          
                                                             
xml-into HDR                                                     
        %XML(Filename:options);   

问题分析与修正方案

核心问题点

  1. 数据结构与XML层级不匹配:XML中<HDR>是<PRINTING>的直接子元素,且所有数据以属性形式存在;但代码中HDR DS下嵌套了PYMT_LINE子DS,而XML中不存在<PYMT_LINE>子节点,导致结构映射失败。
  2. Path参数错误:当前path=PRINTING/HDR/PYMT_LINE指向不存在的节点,xml-into无法找到对应数据进行赋值。
  3. 未指定属性处理:XML中<HDR>的内容是属性(key-value形式),代码未添加attr=yes参数,导致xml-into无法识别属性字段。

修正后的代码示例

// 调整DS层级,匹配XML结构:PRINTING包含HDR数组
dcl-ds PRINTING Qualified;
    dcl-ds HDR DIM(10) Qualified;
        CW_DEPT_CD char(4);         
        CW_FILE_ID char(20);       
        CW_UNIT_CD char(4);        
        BANK_ACCT_CD char(4);
        // 补充其他与XML属性对应的字段
        PYMT_DT char(10);
        PROC_DT char(10);
        // ... 剩余字段
    end-ds HDR;
end-ds PRINTING;

// 调整options:添加attr=yes处理属性,修正path指向正确的根节点
Eval options = 'path=PRINTING +                     
                case=any +                                
                allowextra=yes +                          
                allowmissing=yes +                        
                doc=file +                                
                attr=yes';                          
                                                             
xml-into PRINTING %XML(Filename:options);   

关键说明

  • 若XML中存在<PYMT_LINE>节点(未在当前片段中展示),需将PYMT_LINE DS定义在与XML对应的层级(例如作为<PRINTING>的子元素),而非嵌套在HDR下。
  • 移除代码中与XML结构不匹配的PYMT_LINE嵌套DS(若XML中无对应节点),避免访问不存在的子字段时触发“Identifier does not exist”错误。
  • 通过attr=yes参数告知xml-into处理XML属性,确保属性值能正确映射到DS字段。

内容的提问来源于stack exchange,提问作者Jody

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 02:53:08