2011-01-21 83 views
2

我有一个变量定义为:编码字符转换为字符实体XML

D content      1280A CONST 

我需要找到"&'<>字符并将其替换它们:

&quot;&amp;,&apos;&lt;&gt;分别。

我已经看到了一些语言的XML函数,但这些似乎并不是我所需要的。但我可能是错的,所以我在这里问。

使用RPGLE,自由形式。

解决方案:也许不是很RPG十岁上下,但它的工作

P encode   B    
D     PI   1280A   
D content      1280A CONST  
D outStr   S   1280A      
D strDsp   S    50A 
/free 
    outStr = %trim(content); 
    outStr = replaceAll('&' : '&amp;' : outStr); 
    outStr = replaceAll('"' : '&quot;' : outStr); 
    outStr = replaceAll('''' : '&apos;' : outStr);  
    outStr = replaceAll('>' : '&gt;' : outStr);  
    outStr = replaceAll('<' : '&lt;' : outStr); 
    return outStr;        
/end-free      
P     E   


P*** Procedure: replaceAll ************************************ 
P*** IN: character to replace, replacement text, source  
P*** OUT: transformed string    
P replaceAll  B       
D     PI   1280A   
D character      1A CONST   
D rText       10A CONST  
D content      1280A CONST   
D outStr   S   1280A 
D dspStr   S    50A      
D rSize   S    3P 0          //replacement text size 
D index   S    3P 0          //cur str index 
D cntSize   S    3P 0          //content size 
/free             
    rSize = %len(%trim(rText));        
    cntSize = %len(%trim(content));       
    outStr = content;            
    for i = 1 to cntSize; //scan starts at character 1 not 0 
     index = %scan(character : outStr : i); 
     if index = 0;    
    leave;       
     endif;         
     outStr = %replace(%trim(rText) : outStr : index : 1);  
     i = index + 1;      
    endfor;   
    return outStr; 
/end-free 
P     E   

回答

4

这也许是头脑简单的我,但它是不够的,只是使用内置%替换功能?我的意思是,你不得不反复使用它,为你正在取代的不同的东西。但是有没有什么特殊情况可以挫败无意识的替代品? (例如,我正在考虑人们试图通过无意识地分析逗号来解析CSV的情况,例如,对于某些数据集,这种情况不太好)。

2

有一个%scanrpl函数可以替换所有的事件与另一个字符串的字符串。它看起来像热门票。