var xmlString="<xml></xml> <toto></toto>";
var properString=System.Text.RegularExpressions.Regex.Replace(xmlString, "<([^>]+)></[^>]+>", "<$1/>");
РЕДАКТИРОВАТЬ: объяснение!
@ Нил Найт уже предоставил в комментарии ссылку на Википедию , объясняющую концепцию регулярных выражений.Часть, специфичная для .NET, доступна здесь: Регулярные выражения .NET Framework
Начальный тег XML можно сопоставить со следующим регулярным выражением: <[^>]+>
.Часть [^>]+
может быть прочитана как: все символы, которые не являются ">", по крайней мере с одним символом (поэтому <>
не соответствует, но <a>
есть).Конечный тег XML можно сопоставить с таким же выражением: </[^>]+>
(обратите внимание на косую черту после первого символа).Поэтому регулярное выражение <[^>]+></[^>]+>
соответствует пустым тегам, таким как <foo></foo>
(но будьте осторожны, оно также соответствует <foo></bar>
, который не является допустимым кодом XML).
Теперь нам нужно выделить символы между«<» и «>».Для этого мы используем круглые скобки: <([^>]+)>
.Это указывает механизму регулярных выражений захватывать совпадающие символы.Каждая группа круглых скобок может позже указываться в операции замены строкой «$ x» (где «x» - это число: «$ 1» для первой совпадающей скобки, «$ 2» для второй и т. Д.).
Таким образом, при вызове Regex.Replace(xmlString, "<([^>]+)></[^>]+>", "<$1/>")
, <foo></foo>
будет заменен на <foo/>
(символы «foo» захватываются, а «$ 1» заменяется ими).<foo></bar>
также будет заменено на <foo/>
.
Я надеюсь, что этого объяснения достаточно для @Felix K.; o)
(мой английский не очень хорош, поэтому я не предоставилмного деталей)