Получение выбранного значения атрибута XML-документа с помощью C#

#c# #xml #visual-studio-2010 #c#-4.0

#c# #xml #visual-studio-2010 #c #-4.0

Вопрос:

Ниже приведен мой конфигурационный XML-файл, в котором у меня есть несколько имен пользователя и паролей.Из этого мне нужно выбрать xml-узлы по username значениям атрибутов.

  <Authentication>
    <auth Userame="username1" Password ="xxxxxx"/>
    <auth Userame="username2" Password ="xxxxxxx"/>
    <auth Userame="username3" Password ="xxxxxx"/>
  </Authentication>
  

Что я пытаюсь, так это то, что мне нужно выбрать узел с username2 и обновить значение пароля для этого узла в xml.Я использую XmlDocument и вижу множество примеров с XDocument для выбора атрибута.Возможно ли выполнить это с помощью XmlDocument на C #.

В настоящее время я работаю с одним узлом, и для одного узла я реализовал, как показано ниже,

  XmlDoc.SelectSingleNode("Settings/Authentication/auth").Attributes["Password"].Value = password;
 XmlDoc.Save(path);
  

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

Комментарии:

1. Есть ли у вас элемент настроек, для которого аутентификация является дочерней? Я попробовал ваш пример, но с («Аутентификация / авторизация») вместо («Настройки / Аутентификация / авторизация»). и это работает

2. @Igor Да,аутентификация является дочерним элементом элемента Settings.

3. …и в чем проблема с вашим кодом?

4. @Igor можете ли вы рассказать мне, как это сделать с помощью xmldocument.

5. @har07 , мне нужно выбрать узел с именем пользователя2 и обновить значение пароля для этого узла в xml.

Ответ №1:

Небольшая модификация части XPath вашего кода выполнит эту работу :

 var username = "username2";
var xpath = String.Format("Settings/Authentication/auth[@Userame='{0}']", username);
XmlDoc.SelectSingleNode(xpath)
      .Attributes["Password"]
      .Value = password;
  

Комментарии:

1. Как динамически присваивать значение текстового поля вместо имени пользовательа2. Я должен динамически присваивать значение username2 и обновлять пароль.

2. пробовал так «XmlDoc.SelectSingleNode(«Settings/Authentication/auth[@Userame=» username «]»).Attributes[«Password»].Value; » получение NullReference Execption.

3. обновил мой ответ, вы можете изменить username переменную на любое динамическое значение, которое вы хотите..