2015-08-28 2 views
-6

Я создал эту программу для получения текстов из текстовых полей и хранения в XML-файле, но он не хранится. Также, если я закрываю форму и снова ее открываю и снова вводим данные, как она может обновить один и тот же существующий файл без замены предыдущих данных.? пожалуйста исправить мой кодКак сохранить значения из текстового поля в C#

private void button1_Click(object sender, EventArgs e) 
    { 
     string name = this.txtName.Text; 
     string occupation = this.txtOccupation.Text; 
     string dob = this.txtDob.Text; 
     string nic = this.txtNic.Text; 
     double id = double.Parse(this.lblID.Text); 

     XmlDocument xmlDoc = new XmlDocument(); 
     xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "yes"); 

     XmlNode rootNode = xmlDoc.CreateElement("Users"); 
     XmlNode subNode = xmlDoc.CreateElement("Users"); 

     XmlAttribute nameAtt = xmlDoc.CreateAttribute("Name"); 
     nameAtt.Value = name; 
     XmlAttribute occupationAtt = xmlDoc.CreateAttribute("Occupation"); 
     occupationAtt.Value = occupation; 
     XmlAttribute dobAtt = xmlDoc.CreateAttribute("Date of Birth"); 
     dobAtt.Value = dob; 
     XmlAttribute nicAtt = xmlDoc.CreateAttribute("NIC"); 
     nicAtt.Value = nic; 
     XmlAttribute idAtt = xmlDoc.CreateAttribute("ID"); 
     idAtt.Value = idAtt.ToString(); 

     subNode.Attributes.Append(nameAtt); 
     subNode.Attributes.Append(occupationAtt); 
     subNode.Attributes.Append(dobAtt); 
     subNode.Attributes.Append(nicAtt); 
     subNode.Attributes.Append(idAtt); 

     rootNode.AppendChild(subNode); 
     subNode.AppendChild(rootNode); 

     xmlDoc.Save("E:/Data.xml"); 
     Hide(); 
    } 
} 

}

+0

«обновить тот же существующий файл, не заменяя предыдущие данные» Am В других местах вам нужно будет объяснить, что вы подразумеваете под этим очевидным противоречием. – BradleyDotNET

+0

например: есть файл data.xml и в том, что есть имя ALI, если я снова помещаю запись в форму и вводим имя. Bradley должен быть ALI * новой строкой * Bradley * новая строка * другое имя * новая строка * другое имя * – Ali

+2

XML-файл представляет собой сложную структуру, если вы хотите добавить к нему данные, используя стандартный механизм, сначала прочитайте предыдущий сохраненный файл, а затем добавьте в него данные и сохраните, вы просто сохраните новый документ, чтобы это было перезапись старых данных. – Gusman

ответ

1

Это только простой рабочий пример на основе кода вы предоставили, но, вероятно, есть более эффективные способы сделать то, что вы пытаетесь сделать:

private void button1_Click(object sender, EventArgs e) 
{ 
    string name = this.txtName.Text; 
    string occupation = this.txtOccupation.Text; 
    string dob = this.txtDob.Text; 
    string nic = this.txtNic.Text; 
    double id = double.Parse(this.lblID.Text); 

    // XML file path. 
    string xmlPath = "E:/Data.xml"; 

    XmlDocument xmlDoc = new XmlDocument(); 

    // If specified file does not exist, create a new one. 
    if (!File.Exists(xmlPath)) 
    { 
     XmlDeclaration xmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", "yes"); 
     XmlElement rootNode = xmlDoc.DocumentElement; 
     xmlDoc.InsertAfter(xmlDeclaration, rootNode); 

     XmlNode parentNode = xmlDoc.CreateElement("Users"); 
     XmlNode subNode = xmlDoc.CreateElement("User"); 

     XmlAttribute nameAtt = xmlDoc.CreateAttribute("Name"); 
     nameAtt.Value = name; 
     XmlAttribute occupationAtt = xmlDoc.CreateAttribute("Occupation"); 
     occupationAtt.Value = occupation; 
     XmlAttribute dobAtt = xmlDoc.CreateAttribute("Date_Of_Birth"); 
     dobAtt.Value = dob; 
     XmlAttribute nicAtt = xmlDoc.CreateAttribute("NIC"); 
     nicAtt.Value = nic; 
     XmlAttribute idAtt = xmlDoc.CreateAttribute("ID"); 
     idAtt.Value = id.ToString(); 

     subNode.Attributes.Append(nameAtt); 
     subNode.Attributes.Append(occupationAtt); 
     subNode.Attributes.Append(dobAtt); 
     subNode.Attributes.Append(nicAtt); 
     subNode.Attributes.Append(idAtt); 

     xmlDoc.AppendChild(parentNode); 
     parentNode.AppendChild(subNode); 

     // Save new XML file. 
     xmlDoc.Save(xmlPath); 
    } 
    // If specified file exists, read and update it. 
    else 
    { 
     // Open existing XML file. 
     xmlDoc.Load(xmlPath); 

     // Set to true if current name is already found in the XML file, 
     // of course it should be better to check the ID instead the name, 
     // supposing that ID is unique. 
     bool nameFound = false; 

     // Get all "User" nodes and check if one of them already contains 
     // the specified name. 
     foreach (XmlNode user in xmlDoc.SelectNodes("Users/User")) 
     { 
      if (user.Attributes.GetNamedItem("Name").Value == name) 
      { 
       nameFound = true; 
       break; 
      } 
     } 

     // If the name is not already in the file, insert a new user 
     // with that name. 
     if (nameFound == false) 
     { 
      XmlNode subNode = xmlDoc.CreateElement("User"); 

      XmlAttribute nameAtt = xmlDoc.CreateAttribute("Name"); 
      nameAtt.Value = name; 
      XmlAttribute occupationAtt = xmlDoc.CreateAttribute("Occupation"); 
      occupationAtt.Value = occupation; 
      XmlAttribute dobAtt = xmlDoc.CreateAttribute("Date_Of_Birth"); 
      dobAtt.Value = dob; 
      XmlAttribute nicAtt = xmlDoc.CreateAttribute("NIC"); 
      nicAtt.Value = nic; 
      XmlAttribute idAtt = xmlDoc.CreateAttribute("ID"); 
      idAtt.Value = id.ToString(); 

      subNode.Attributes.Append(nameAtt); 
      subNode.Attributes.Append(occupationAtt); 
      subNode.Attributes.Append(dobAtt); 
      subNode.Attributes.Append(nicAtt); 
      subNode.Attributes.Append(idAtt); 

      xmlDoc.SelectSingleNode("Users").AppendChild(subNode); 

      xmlDoc.Save(xmlPath); 
     } 
    } 
} 

И это пример вывода XML-файл:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Users> 
    <User Name="John" Occupation="student" Date_Of_Birth="1990" NIC="NIC" ID="123" /> 
    <User Name="David" Occupation="professor" Date_Of_Birth="1973" NIC="NIC" ID="452" /> 
</Users> 
+0

@Ali: Если этот ответ решил вашу проблему, вы должны пометить его как принятый ответ (щелкните галочку в верхней левой части ответа). Это правильный способ сказать «спасибо» в Stack Overflow;). –