在 C# 中用“”替换新行

replace new lines with "" in C#

我想转换这个:

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

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

请帮助我。仅翻译标签。
我试过这个:

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

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

代码中的新行由“\n”决定,也可能由“\r”决定。您可以简单地删除这些:

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>

成为:

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

希望对您有所帮助。

你所拥有的应该有用。您可以通过将 XDocument 转储到字符串变量来进行验证,以确认 SaveOptions 是否正在删除格式。

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

        XDocument xmlDoc = new XDocument(new XElement("Team", new XElement("Developer", "Sam")));
        var content = xmlDoc.ToString(SaveOptions.DisableFormatting);

您可以使用

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

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

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

您的 translation 元素中有 重要的 空格;该元素包含文本,因此假定它是元素内容的一部分。如果没有说明它可以折叠的模式或 DTD,则无论对读取或写入时的空白处理进行多少更改都无法消除它。这些选项仅与 insignificant 空格有关。

你可以做的是应用你自己的处理:使用 LINQ 到 XML,你可以 trim 使用像这样的东西只包含文本的所有元素的空白:

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