【问题标题】:Why when I read from an XML document do I get \r\r\n\n etc etc?为什么当我从 XML 文档中读取时会得到 \r\r\n\n 等?
【发布时间】:2011-05-12 16:06:42
【问题描述】:

我知道这些是转义字符,但我如何从 XML 文档中读取并忽略它们?顺便说一句,我正在使用XmlDocument

【问题讨论】:

  • 你在看什么书? xml文档? X文档?还有什么?
  • 这些是换行符。 ignore them 是什么意思?
  • 请至少提供一些关于输入内容和期望结果的信息。
  • @Martinho im using XmlDocument ... @Frederic 我不希望在通过读取包含它们的 xml 节点设置变量时使用它们。我想要的是可读字符而不是 /r/ n / t等等等......

标签: c# xml escaping


【解决方案1】:

您从文件中读取的字符串实际上并不包含"\r\n"。那些是escape sequences'\r''\n' 分别代表回车符和换行符,它们共同构成一个换行符。

但是,如果您使用 VS 调试器查看字符串,您可能会看到转义序列而不是实际的换行符。来自MSDN

注意 在编译时,逐字字符串被转换为具有所有相同转义序列的普通字符串。因此,如果您在调试器监视窗口中查看逐字字符串,您将看到编译器添加的转义字符,而不是源代码中的逐字版本。例如,逐字字符串@"C:\files.txt" 将在监视窗口中显示为"C:\\files.txt"

例子:

var mystring = "Hello\r\nWorld";

Console.Write(mystring);

输出:

你好 世界

如果你真的想去掉字符串中的换行符,例如,你可以使用正则表达式:

var result = Regex.Replace(mystring, @"\s+", " ");

// result == "Hello World";

【讨论】:

  • 我知道我看到这是一个很好的回应我想我错过了一个事实,即这些只是可见的,因为我正在查看调试器.....
【解决方案2】:

答案取决于您从文本文件中读取的具体程度以及您最终要完成的任务。

这是一个非常简单的解决方案:

StringBuilder sb = new StringBuilder();
using(var sr = new System.IO.StreamReader('path/to/your/file.txt'))
{
  while(true)
  {
     string line = sr.ReadLine();
     // if this is the final line, break out of the while look
     if(line == null)
        break;
     // append this line to the string builder
     sb.Append(line);
  }
  sr.Close();
}

// the sb instance hold all the text in the file, less the \r and \n characters
string textWithoutEndOfLineCharacters = sb.ToString();

【讨论】:

    【解决方案3】:

    您可以像这样对文件的内容进行字符串替换:

    string contents = File.ReadAllText('myfile.txt');
    contents = contents.Replace('\n', '');
    

    【讨论】:

      猜你喜欢
      • 2018-08-31
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      • 2013-12-07
      • 1970-01-01
      • 1970-01-01
      • 2019-08-13
      • 1970-01-01
      相关资源
      最近更新 更多