LINQ to XML генерирует \ r \ n между тегами? - PullRequest
2 голосов
/ 10 сентября 2010

Я создаю XElement, имеющий следующую структуру:

<TestNames>\r\n <Test>YA</Test>\r\n <Test>YO</Test>\r\n </TestNames>

Как избавиться от пробелов и \ r \ n не взломанным способом:)

Обновление :

XElement testsXmlDocument= new XElement("TestNames");           

foreach (string test in selectedTests)         
    testsXmlDocument.Add(new XElement("Test",test)); 

return testsXmlDocument.ToString();

Ответы [ 2 ]

9 голосов
/ 10 сентября 2010

XElement обеспечивает перегрузку ToString , которая принимает аргумент типа SaveOptions.Одним из значений этого перечисления является DisableFormatting.

Если это не дает вам достаточного контроля, вам нужно использовать перегрузку Save XElement, которая принимает экземпляр XmlWriter .Выходные данные XmlWriter можно контролировать с помощью XmlWriterSettings .

Обратите внимание, что рекомендуемый способ создания XmlWriter - использовать статический метод Create вместо его создания.непосредственно.Если вы хотите вывод в строке, вы можете использовать перегрузку, которая принимает StringWriter .

0 голосов
/ 16 августа 2011

Мне пришлось записать данные базы данных в файл XML и прочитать их обратно из файла XML, используя LINQ to XML. Некоторые поля в записи сами были строками xml с символами \ r. Они должны были остаться нетронутыми. Я потратил несколько дней, пытаясь найти что-то, что бы работало, но, похоже, Microsoft задумал конвертировать \ r в \ n.

У меня работает следующее решение:

Чтобы записать загруженный XDocument в файл XML, сохраняя \ r без изменений, где xDoc - это XDocument, а filePath - строка:

XmlWriterSettings xmlWriterSettings = new XmlWriterSettings 
    { NewLineHandling = NewLineHandling.None, Indent = true };
using (XmlWriter xmlWriter = XmlWriter.Create(filePath, xmlWriterSettings))
{
    xDoc.Save(xmlWriter);
    xmlWriter.Flush();
}

Чтобы прочитать XML-файл в XElement, сохраняя \ r неповрежденным:

using (XmlTextReader xmlTextReader = new XmlTextReader(filePath) 
   { WhitespaceHandling = WhitespaceHandling.Significant })
{
     xmlTextReader.MoveToContent();
     xDatabaseElement = XElement.Load(xmlTextReader);
}
...