Прежде всего, я знаю, что это плохое решение, и я не должен этого делать.
Фон: не стесняйтесь пропускать
Однако мне нужно быстрое исправление для работающей системы. В настоящее время у нас есть структура данных, которая сериализуется в строку путем создания фрагментов "xml" с помощью ряда конструкторов строк. Является ли это действительным XML, я скорее сомневаюсь. После создания этого xml и перед его отправкой по очереди сообщений некоторый код очистки ищет в строке вхождения объявления xml и удаляет их.
Способ, которым это делается (итерация каждого символа, выполняющего indexOf для <?xml
), настолько медленен, что вызывает тайм-ауты потоков и убивает наши системы. В конечном счете, я попытаюсь исправить это правильно (создайте xml, используя документы xml или что-то подобное), но на сегодня мне нужно быстрое исправление, чтобы заменить то, что там есть.
Пожалуйста, имейте в виду, я знаю, что это далеко не идеальное решение, но мне нужно быстрое решение, чтобы вернуть нас к работе.
Вопрос
Я думал использовать регулярные выражения, чтобы найти объявления. Я планировал: <\?xml.*?>
, затем с помощью Regex.Replace(input, string.empty)
удалить.
Не могли бы вы сообщить мне, есть ли какие-либо явные проблемы с этим регулярным выражением, или лучше просто написать его в коде, используя пары string.IndexOf("<?xml")
и string.IndexOf("?>")
в (гораздо более разумном) цикле.
EDIT
Мне нужно позаботиться о переводе строк.
Будет ли: <\?xml[^>]*?>
сделать трюк?
EDIT2
Спасибо за помощь. Regex мудрый <\?xml.*?\?>
работал нормально. В итоге я написал некоторый временной код и протестировал как ar egex, так и IndexOf()
. Я обнаружил, что для нашего простейшего варианта использования, просто удаление объявления заняло:
- Почти секунда, как это было
- .01 секунды с регулярным выражением
- невозможно использовать с помощью цикла и
IndexOf()
Итак, я выбрал IndexOf()
, так как это очень простой цикл.