2011-01-21 2 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, которая заменит все вхождения строки с другой строкой. Это похоже на горячий билет.

Смежные вопросы