2011-01-21 79 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函數可以替換所有的事件與另一個字符串的字符串。它看起來像熱門票。