Есть такой код:
var doc = new XDocument(
new XElement("root",
new XElement(xname, xvalue)
));
, где xname и xvalue произвольные значения и могут содержать всякие бяки.
Так вот, если xvalue содержит спец. xml символы ('<', '>', '\"', '\'', '&'), они благополучно эскейпятся и проблем не возникает.
А вот с xname такое не проходит.
Google подсказал замечательный класс SecurityElement с методом Escape, но он не подходит.
Во-первых, имя тега не может содержать спец. символов даже в заескейпаном виде (пример ексепшена: The '&' character, hexadecimal value 0x26, cannot be included in a name.).
А во-вторых на него распространяются и другие ограничения, например: Name cannot begin with the '.' character, hexadecimal value 0x2E (имя не может начинаться с '.' символа).
Вопрос: как кошерно заескейпить или хотя бы проверить на валидность имя тега (SecurityElement.IsValidTag(xname) возвращает true для xname с '.' вначале) + ткните пжалста где эти правила популярно расписаны — в крайнем случае придется ручками вызывать string.replace...