2014-12-08 4 views
0

У меня есть эта проблема, когда всякий раз, когда я сохраняю значение атрибута xml, которое содержит '\ t' (пример: MyNetwork \ trash), я получаю «MyNetwork rash». Кроме того, есть некоторые, в которых «\ n» в тексте получает значение в шестнадцатеричном значении.XmlDocument.Save изменяет текст, содержащий ' t' на вкладку

Ниже приведен код, который я использую.

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(); 

Пожалуйста, помогите мне в этом.

+1

Path = @ «MyNetwork \ трэш» – feiyun0112

ответ

1

Побег \, в противном случае \t будет интерпретироваться как специальный символ,

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

Отъезда Инстанцирования строкового объекта раздела в String Class на MSDN:

Обратите внимание, что в C# , потому что обратная косая черта (\) является символом-побегом, Либеральная обратная косая черта в строке должна быть экранирована или вся строка должно быть присвоено значение @.

+0

Так что я думаю, я должен был бы делать манипуляции со строками для того, чтобы добавить еще один '\' верный? – Musikero31

+0

@ Musikero31, просто используйте \\, если вы хотите добавить \ в свою строку. Или используйте '@' перед строкой, которую вы хотите добавить. Я добавил ссылку на свой ответ. – mihai

+0

Я использовал метод расширения, чтобы справиться с этим. Но это решило мою проблему. Спасибо! – Musikero31

0

Проблема заключается в том, что \ t в строке создает символ табуляции (аналогично тому, как \ n создает новую строку, \ "создает речевую метку и \\ создает обратный ход). Помните, когда вы ставите \ в строке, его нужно удвоить. Замените \ t на \\ t, и он должен работать.

В качестве альтернативы, поставьте @ перед строкой, например, @ «MyNetwork \ Trash». Обратите внимание, что если @ появляется перед строкой, и вы хотите поместить «в строку, вам нужно использовать», например @ "Речевой вывод выглядит следующим образом:" "".

0

\ т преобразует на вкладку (6 мест)

\ п превращается в новую строку

Вы можете использовать символ @ перед тем, чтобы избежать их.

string p = @"MyNetwork\trash"; 
+0

Я пробовал это с помощью этого кода: 'node.Attributes [" path "]. Value = @ config.Path;' но он все еще не получает результат, который я хочу. – Musikero31

+0

Вы уверены, что это не проблема с xpath? Попробуйте с жестко закодированным текстом в режиме отладки, чтобы убедиться, что у вас есть xpaths correct –

+0

Нет. Я разместил код выше, чтобы вы могли видеть, что я уже это сделал. Я также добавил '@ config.Path' только для обеспечения его, но все еще имею проблемы. – Musikero31

Смежные вопросы