【问题标题】:replace new lines with "" in C#在C#中用“”替换新行
【发布时间】:2016-12-04 00:02:53
【问题描述】:

我想转换这个:

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

&lt;translation&gt;1 Sənədlər&lt;/translation&gt; 在 XML 中使用 C#。

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

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

但它不会删除&lt;translation&gt; 标记之间的新行。

【问题讨论】:

  • 请在发布之前使用格式帮助和预览确保您的问题至少清晰易读。
  • 试试用""替换System.Environment.NewLine吧?

标签: c# xml replace newline


【解决方案1】:

代码中的新行由“\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>

我希望这会有所帮助。

【讨论】:

  • 这可能会意外地适用于这个特定的字符串,但实际上会 mangleCDATA 部分中找到数据。它也不需要 - XML 像 HTML 一样忽略换行符。如果要保留它们,则必须使用编码形式( , )
  • @PanagiotisKanavos XML 不会忽略换行符作为文本内容的一部分。如果它们被忽略,问题就不会存在。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    您可以使用环境敏感的方式手动去除换行符

    var content = xmlString.Replace(Environment.NewLine, string.Empty)
    

    【讨论】:

    • 首先,XML 文档没有环境。其次,替换这些字符可能会破坏CDATA 部分。第三,XML 忽略 换行符。如果你想保留换行符,你必须使用编码形式(例如&amp;#xD
    【解决方案4】:

    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 以获取演示。

    【讨论】:

      猜你喜欢
      • 2017-06-27
      • 1970-01-01
      • 2022-01-09
      • 2013-08-05
      • 1970-01-01
      • 1970-01-01
      • 2011-07-28
      • 2015-02-01
      • 2021-12-03
      相关资源
      最近更新 更多