用C#中的“”替换换行

时间:2016-07-29 10:01:23

标签: c# xml replace newline

我想转换一下:

  <translation>
      1 Sənədlər
    </translation>

要   使用C#在XML中<translation>1 Sənədlər</translation>

请帮帮我。只有翻译标签 我试过这个:

XDocument xdoc = XDocument.Load(path);
        xdoc.Save("path, SaveOptions.DisableFormatting);

但它不会删除<translation>标记之间的新行。

4 个答案:

答案 0 :(得分:3)

你应该有什么工作。您可以通过将XDocument转储到字符串变量来确认SaveOptions是否正在删除格式。

例如:我尝试了以下内容,内容没有任何格式,包括换行符和空格。

from __future__ import print_function

答案 1 :(得分:2)

代码中的新行由&#34; \n&#34;并且还可能&#34; \r&#34;。你可以简单地删除这些:

string xmlString = "<translation>\r\n1 Sənədlər\r\n</translation>"; // With the 'new lines'

xmlString = xmlString.Replace("\r", "").Replace("\n", "");

这将导致:

<translation>
1 Sənədlər
</translation>

Becomming:

<translation>1 Sənədlər</translation>

我希望这会有所帮助。

答案 2 :(得分:0)

您可以使用

以对环境敏感的方式手动删除换行符
var content = xmlString.Replace(Environment.NewLine, string.Empty)

答案 3 :(得分:0)

XML定义了两种类型的空白:重要和无意义:

无关紧要的空白是文本内容不发生的元素之间的空白,而重要的空白是包含文本内容的元素中的空白。您可能会发现this article中的图形有助于显示差异。

translation元素中的内容是重要的空格;元素包含文本,因此假定它是元素内容的一部分。如果没有模式或DTD表明它可以折叠,那么在读取或写入时不会改变空白处理的数量将会删除它。这些选项仅与无关紧要的空格有关。

您可以做的是应用您自己的处理:使用LINQ to XML,您可以使用以下内容修剪所有仅包含文本的元素的空白:

var textElements = doc.Descendants()
    .Where(element => element.Nodes().All(node => node is XText));

foreach (var element in textElements)
{
    element.Value = element.Value.Trim();
}

请参阅this fiddle了解演示。