Замена поля XML в C # - PullRequest
       27

Замена поля XML в C #

3 голосов
/ 07 октября 2009

хорошо, у меня есть XML-файл, который выглядит следующим образом:

<?xml version="1.0"?>
<Users>
  <User ID="1">
    <nickname>Tom</nickname>
    <password>a password</password>
    <host>anemail@hello.com</host>
    <email>anemail</email>
    <isloggedin>false</isloggedin>
    <permission>10</permission>
  </User>
  <User ID="2">
    <nickname>ohai</nickname>
    <password>sercret</password>
    <host>my@host</host>
    <email>my@email</email>
    <isloggedin>false</isloggedin>
    <permission>1</permission>
  </User>
<Users>

Теперь, во-первых, я получу возвращенный номер своего удостоверения личности, поэтому у меня будет "2". Исходя из этого, мне нужно будет зайти, отредактировать поля в нем и заново сохранить xml. так что в основном мне нужно открыть файл, найти информацию для идентификатора пользователя = "2" и заново сохранить xml с различными значениями внутри пользователя 2, не затрагивая остальную часть документа.

из базы подписки:

  <User ID="2">
    <nickname>ohai</nickname>
    <password>sercret</password>
    <host>my@host</host>
    <email>my@email</email>
    <isloggedin>false</isloggedin>
    <permission>1</permission>
  </User>

// делаем здесь изменения и в итоге получаем

  <User ID="2">
    <nickname>ohai</nickname>
    <password>somthing that is different than before</password>
    <host>the most current host that they were seen as</host>
    <email>my@email</email>
    <isloggedin>false</isloggedin>
    <permission>1</permission>
  </User>

и т.д.

Резюме: Мне нужно открыть текстовый файл, вернуть информацию через идентификационный номер, отредактировать информацию, повторно сохранить файл. не затрагивая ничего, кроме пользователя 2

~ Спасибо!

Ответы [ 3 ]

4 голосов
/ 07 октября 2009

Есть несколько способов сделать это - это с XmlDocument, который работает в .NET 1.x и выше и работает нормально, если ваш XML-документ не слишком длинный:

// create new XmlDocument and load file
XmlDocument xdoc = new XmlDocument();
xdoc.Load("YourFileName.xml");

// find a <User> node with attribute ID=2
XmlNode userNo2 = xdoc.SelectSingleNode("//User[@ID='2']");

// if found, begin manipulation    
if(userNo2 != null)
{
   // find the <password> node for the user
   XmlNode password = userNo2.SelectSingleNode("password");
   if(password != null)
   {
      // change contents for <password> node 
      password.InnerText = "somthing that is different than before";
   }

   // find the <host> node for the user
   XmlNode hostNode = userNo2.SelectSingleNode("host");
   if(hostNode != null)
   {
      // change contents for <host> node 
      hostNode.InnerText = "the most current host that they were seen as";
   }

   // save changes to a new file (or the old one - up to you)
   xdoc.Save("YourFileNameNew.xml");
}

Если вы используете .NET 3.5 или более позднюю версию, вы также можете проверить Linq-to-XML для еще более простого способа манипулировать вашим XML-документом.

Марк

0 голосов
/ 07 октября 2009

Вы можете использовать XmlDocument для этого:

var doc = new XmlDocument();
doc.Load("1.xml");
var node = doc.SelectSingleNode(@"//User[@ID='2']");
node.SelectSingleNode("password").InnerText="terces";
doc.Save("1.xml");
0 голосов
/ 07 октября 2009

Проверьте этот вопрос, ответ должен быть с использованием Linq-to-XML. Это включает запись в консольное окно, но теория та же самая.

Linq to XML - обновить / изменить узлы документа XML

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...