【问题标题】:XmlDocument.Save changes text containing '\t' to tabXmlDocument.Save 将包含“\t”的文本更改为选项卡
【发布时间】:2014-12-08 06:46:10
【问题描述】:

我有这个问题,每当我保存包含“\t”的 xml 属性值(例如:MyNetwork\trash)时,我都会收到“MyNetwork rash”。此外,还有一些文本中的 '\n' 被更改为十六进制值。

下面是我正在使用的代码。

Config mmsConfig = new Config
{
   Path = "MyNetwork\trash"
};

XmlDocument xml = new XmlDocument();
xml.Load(configFile);
XmlNodeList xmlNodeList = xml.SelectNodes("MMS");

foreach (XmlNode node in 
         from XmlNode xmlNode in xmlNodes 
         from XmlNode node in xmlNode.ChildNodes 
         select node)
{
   if (node.Attributes == null)
   {
      throw new ArgumentNullException(configFile, "Unable to locate attributes");
   }

   if (node.Attributes["path"] != null)
   {
      node.Attributes["path"].Value = @config.Path;
   }
}

XmlTextWriter xmlText = new XmlTextWriter(configFile, Encoding.UTF8);
xmlText.Formatting = Formatting.None;

xml.Save(xmlText);
xmlText.Close();

请帮帮我。

【问题讨论】:

  • 路径 = @"MyNetwork\trash"

标签: c# xml xmldocument


【解决方案1】:

转义\,否则\t将被解释为特殊字符,

Config mmsConfig = new Config
{
   Path = "MyNetwork\\trash"
                    ^
};

查看 MSDN 上 String Class 中的实例化字符串对象部分:

请注意,在 C# 中,因为反斜杠 (\) 是转义字符, 字符串中的文字反斜杠必须转义或整个字符串 必须是 @-quoted。

【讨论】:

  • 所以我想我需要进行字符串操作才能附加另一个'\'对吗?
  • @Musikero31,如果你想在你的字符串中附加一个\,只需使用\\。或者,在要附加的字符串前面使用@。我已在回复中添加了链接。
  • 我做了一个扩展方法来处理这个问题。但这解决了我的问题。谢谢!
【解决方案2】:

问题是字符串中的 \t 会创建一个制表符(类似于 \n 创建一个新行,\" 创建一个语音标记,而 \\ 创建一个反斜杠)。请记住,每当您将 \ 放在字符串,它需要加倍。用 \\t 替换 \t 应该可以工作。

或者,在字符串之前添加一个@,例如@“我的网络\垃圾”。请注意,如果 @ 出现在字符串之前,并且您想在字符串中放置一个 ",则需要使用 "" 例如 @"A speechmark 看起来像这样:""。"

【讨论】:

    【解决方案3】:

    \t 转换为制表符(6 个空格)

    \n 转换为新行

    你可以在前面使用@符号来转义这些。

    string p = @"MyNetwork\trash";
    

    【讨论】:

    • 我用这个代码试过那个:node.Attributes["path"].Value = @config.Path; 但它仍然没有得到我想要的结果。
    • 你确定这不是 xpath 的问题吗?尝试在调试模式下使用硬编码文本以确保您的 xpath 正确
    • 不。我将代码放在上面,以便您可以看到我已经这样做了。我还添加了@config.Path 只是为了确保它,但仍然有问题。
    • 应仅在提到的答案中为文字字符串添加 @ 符号。另外,你能编译代码吗?
    【解决方案4】:

    \t\nescape sequences,因此您需要将它们的 \ 转义为 \\t\\n

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-26
      • 2018-03-09
      • 1970-01-01
      • 2018-03-26
      • 1970-01-01
      • 2016-07-22
      相关资源
      最近更新 更多