2015-04-08 4 views
1

Это моя строка:Замена символов в строки с двойной Цитата

<HOLDERS><ACCOUNTHOLDER Title="" Initials="" FirstName="" Surname="" Name="AN'A"N&D & TEST'S"I&X" CifKey="ANA"D.TSX000" CustomerType="2" PrimaryPan="00027272898"/></HOLDERS> 

как я заменить двойные кавычки "в названии и cifkey и заменить их

&quot; 

при сохранении двойные кавычки везде в строке?

выход должен быть

<HOLDERS><ACCOUNTHOLDER Title="" Initials="" FirstName="" Surname="" Name="AN'A&quot;N&D & TEST'S&quot;I&X" CifKey="ANA&quot;D.TSX000" CustomerType="2" PrimaryPan="00027272898"/></HOLDERS> 
+2

Похоже, вы пытаетесь построить XML. Если это так, было бы гораздо лучше использовать библиотеку или инструмент, который понимает XML (например, [MSXML-компонент] (https://msdn.microsoft.com/en-us/library/ms763742.aspx)), а скорее чем пытаться объединить вещи вместе с помощью строк и регулярных выражений. Таким образом, вы, скорее всего, получите все правильное экранирование (т. Е. Текущий ожидаемый результат все еще недействителен, так как '&' s также следует экранировать). –

+0

К сожалению, я имею дело с действительно старым кодом, который я не могу сильно изменить. Строка передается в файл oDomDoc.loadxml (sXmlData) \t, однако sXmlData, которая является приведенной выше строкой, не была правильно сформирована. Мне нужно сделать некоторые замены. Но не могу решить, как изменить «в имени и CIfKey без влияния остальная часть строки и другая "... – Dritzz

+0

Тогда у вас есть беспорядок, и это точно. Существуют ли какие-либо предположения, которые могут быть сделаны в отношении '' '' внутри атрибутов? То есть они всегда будут окружены алфавитными символами, как в вашем примере (или, по крайней мере, никогда не должны следовать пробелы или '/')? –

ответ

0

Я написал все отрывки только для того, чтобы быть чистым, но вы можете сделать функцию и сократить все до нескольких строк.

Наверное, это не самый чистый путь, но заставляйте его работать и улучшать его. Предполагая, что txt - ваша строка.

index1 = InStr(txt," Name=") 'space before Name is important not to confuse with firstName, Surname and so on... 
index2 = InStr(txt, " CifKey=") 'space before Cifkey is important... 
index3 = InStr(txt, " CustomerType=") 'space before CustomerType is important... 

SubStrName = Mid(txt, index1 + 7, index2 - 1) 
txt = Replace(txt,"SubStrName","##AAA##") 'modifing original string with placeholder which you should be sure is never inside the text 
NewChunk1 = Replace(SubStrName,""","&quot;") 
txt = Replace(txt,"##AAA##","NewChunk1") 

SubStrCifKey = Mid(txt, index2 + 8, index3 - 1) 
txt = Replace(txt,"SubStrCifKey","##BBB##") 
NewChunk2 = Replace(SubStrName,""","&quot;") 
txt = Replace(txt,"##BBB##","NewChunk2") 
Смежные вопросы