Кодировать символы в сущности символов для XML
Вопрос
У меня есть переменная, определенная как:
D content 1280A CONST
Мне нужно найти "
, &
, '
, <
, >
символы и замените их:
"
, &
, '
, <
, а также >
; соответственно.
Я видел некоторые функции XML на языке, но это не то, что мне нужно. Но я мог ошибаться, так что здесь я спрашиваю.
Использование RPGLE, Freeform.
Решение: Возможно, не очень rpg-ish, но это сработало
P encode B
D PI 1280A
D content 1280A CONST
D outStr S 1280A
D strDsp S 50A
/free
outStr = %trim(content);
outStr = replaceAll('&' : '&' : outStr);
outStr = replaceAll('"' : '"' : outStr);
outStr = replaceAll('''' : ''' : outStr);
outStr = replaceAll('>' : '>' : outStr);
outStr = replaceAll('<' : '<' : 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
Решение
Может быть, это просто с учетом меня, но будет ли этого достаточно, чтобы просто использовать встроенную функцию замены %? Я имею в виду, вам придется использовать его неоднократно, для разных вещей, которые вы заменяете. Но есть ли какие -либо особые случаи такого рода поражения бессмысленным заменой? (Я думаю о том, как часто люди пытаются просто проанализировать CSV, например, бездумно нарушая запятые. Это не очень хорошо для некоторых наборов данных.)
Другие советы
Существует %функции ScanRPL, которая заменит все входы строки другой строкой. Это похоже на горячий билет.