Как сказал Майкл Кей, \r
, \n
и \r\n
рассматриваются как эквивалентные.
Поэтому, если вам нужно иметь отдельный символ \r
в xml, то Вы должны записать его как 
сущность.
Давайте создадим тест xml с необходимым нам содержанием.
string s = "<root><a/>
\r\n<b/>
<c/>\r\n</root>";
File.WriteAllText("test.xml", s, Encoding.UTF8);
Теперь давайте прочитаем его с сохранением пробельных символов и посмотрим, что они преобразуются в.
var doc = XDocument.Load("test.xml", LoadOptions.PreserveWhitespace);
foreach (var node in doc.DescendantNodes())
{
if (node is XElement elem)
{
Console.WriteLine("Element: " + elem.Name);
}
if (node is XText text)
{
Console.WriteLine("Text: " +
string.Join(", ", text.Value.Select(c => ((int)c).ToString("X"))));
}
}
Результат будет следующим.
Element: root
Element: a
Text: D, A
Element: b
Text: D
Element: c
Text: A
Как видите, пробельные символы хранятся в XText
узлах.
Сущность 
представляется как \r
(D
символ в шестнадцатеричном представлении).
Новая строка \r\n
представляется как один символ \n
(A
в шестнадцатеричном представлении) ).
Таким образом, вы можете анализировать содержимое узлов XText
и вручную определять их содержимое.