LINQ to XML在标签之间生成\ r \ n?

时间:2010-09-10 10:58:54

标签: xml linq linq-to-xml whitespace

我正在生成具有以下结构的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 个答案:

答案 0 :(得分:9)

XElement提供ToString的重载,它接受SaveOptions类型的参数。此枚举的值之一是DisableFormatting

如果这不能给你足够的控制权,那么你需要使用带有XmlWriter实例的XElement的Save重载。可以使用XmlWriterSettings来控制XmlWriter的输出。

请注意,创建XmlWriter的推荐方法是使用静态Create方法,而不是直接构造一个方法。如果您希望输出为字符串,则可以使用带有StringWriter的重载。

答案 1 :(得分:0)

我必须使用LINQ to XML将数据库数据写入xml文件并从xml文件中读回。记录中的某些字段本身是xml字符串,其中包含\ r \ n字符。这些必须保持完整。我花了几天时间试图找到可行的东西,但似乎微软是通过设计将\ 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文件读入保留\ r的XElement:

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