使用C#读取xml时保留新行

时间:2011-11-08 20:46:09

标签: c# .net xml

我有一个xml,我把它读到了一个表格单元格,但似乎有一个新行 用白色空间改变它。当我使用C#读取xml时,如何保留新行。

var xmlDoc = XDocument.Load(new XmlTextReader(Server.MapPath("NSrc.xml")),
LoadOptions.PreserveWhitespace); 

foreach (var descendant in xmlDoc.Descendants("NewsItem")) 
{    
    var title = descendant.Element ("Title").Value;
    TableRow rw = new TableRow();
    TableCell cell = new TableCell();

    var title = descendant.Element("Title").Value;
    var summary = descendant.Element("Summary").Value;

    cell.Text = title;
    rw.Cells.Add(cell);
    tbl.Controls.Add(rw);

    rw = new TableRow();
    cell = new TableCell();
    cell.Text = summary;
    rw.Cells.Add(cell);
    tbl.Controls.Add(rw);
}

2 个答案:

答案 0 :(得分:7)

这是正确的XML行为,XML中不存在换行符。某些格式化程序可能会在输出中添加它们(再次但可能不同)。

  

当我阅读xml

时,如何保留新行

将文本打包在CDATA元素中。


修改

xmlDoc.Root.Add(new XCData("line1\nline2"));

您可以将此多行文本检索为Root.Value

答案 1 :(得分:2)

通过设置PreserveWhitespace,您尝试了一种“应该工作”的简单方法。对于大多数XML阅读API,这完全按照您的预期工作,并且元素数据中出现的任何换行将在您的程序中逐字回读(但要注意所有其他空格,包括缩进等也将包含在内)。 / p>

但是,当与XmlReader一起使用时,Load方法ignores the Preserve setting。 D'哦。

如果您改为Load from a Stream,它应该保留LoadOptions要求的空格。

(我将把它留给其他人来决定是否以这种方式保留空格是一种好的或坏的方法。如果你控制源XML数据,使用CDATA编码换行无疑会更正确。但这是一种可行的方法,我觉得让你知道它为什么不像你期望的那样工作是公平的。)