2012-08-11 84 views
0

這樣我就可以獲得記錄的詳細信息,並且我想知道如何編輯這些值並將其更新爲相同的記錄?xml中的更新記錄

如何檢查屬性中的唯一值?

XDocument doc = XDocument.Load(filePath); 

string id = textBox6.Text; 
XElement element = doc.Descendants("Customer").FirstOrDefault(p => p.Attribute("id").Value == id); 

if (element != null) 
{ 
    //found 
    textBox6.Text = textBox6.Text; 
    textBox1.Text = (string)element.Element("FirstName"); 
    textBox2.Text = (string)element.Element("LastName"); 
    textBox3.Text = (string)element.Element("Mobile"); 
    textBox4.Text = (string)element.Element("Address"); 
    textBox5.Text = (string)element.Element("Country"); 
} 

示例XML:

<?xml version="1.0" encoding="utf-8"?> 
<CustomerRecord> 
    <Customer id="43543543"> 
    <FirstName>sdf</FirstName> 
    <LastName>fdsf</LastName> 
    <Mobile>23452345é</Mobile> 
    <Address>zfdsf</Address> 
    <Country>dsfdsf</Country> 
    </Customer> 
</CustomerRecord> 

回答

1
XElement element; 
XDocument doc; 

private void Load() 
{ 
    doc = XDocument.Load(filePath); 

    string id = textBox6.Text; 
    element = doc.Descendants("Customer").FirstOrDefault(p => p.Attribute("id").Value == id); 

    if (element != null) 
    { 
     //found 
     textBox6.Text = textBox6.Text; 
     textBox1.Text = (string)element.Element("FirstName"); 
     textBox2.Text = (string)element.Element("LastName"); 
     textBox3.Text = (string)element.Element("Mobile"); 
     textBox4.Text = (string)element.Element("Address"); 
     textBox5.Text = (string)element.Element("Country"); 
    } 
} 

protected void btnSave_Click(object sender, EventArgs e) 
{ 
    element.Attribute("id").Value = textBoxID.text; 
    var firstNameSimilarElement = doc.Descendants("FirstName").FirstOrDefault(fn => fn.Value == textBox1.Text) 
    if (firstNameSimilarElement != null && firstNameSimilarElement.Parent != element) 
    { 
     MessageBox.Show("First Name already exists"); 
    } 
    else 
    { 
     element.Element("FirstName").Value = textBox1.Text; 
    } 
    // Same for all fields 
    doc.Save(filePath); 
} 
+0

:我如何更新身份證? – linguini 2012-08-11 21:32:09

+0

剛剛更新了我的回答 – 2012-08-11 21:38:20

+0

@Genial,Merci。 – linguini 2012-08-11 21:40:46

0

您可以哈希節點的內容和哈希附加到生成的XML。哈希將是唯一足以充當您的記錄的「主鍵」。

+0

:請詳細解釋我。 – linguini 2012-08-11 21:19:05

+0

在我看來,您正嘗試'生成'某種類型的ID值,以根據此記錄內容的唯一性獲取唯一的句柄(id)給您的記錄。如果您只需將所有客戶的字段連接在一起(以字符串形式)並在結果字符串上調用'GetHashCode()',則會得到一個充當某種主鍵的數字(http://msdn.microsoft.com /en-us/library/system.string.gethashcode.aspx)。當然,這個數字並非最終唯一,但是如果將縮小結果集。從那裏開始,逐場比較,縮小到您的獨特記錄。 – RedFury 2012-08-11 21:39:28

+0

好的,我正在閱讀內容。謝謝。 – linguini 2012-08-11 21:41:56

1

例如,我只使用2個子節點(FirstName,LastName)。我用exe文件將file.xml放在同一目錄中,這裏是代碼:

using System; 
using System.Windows.Forms; 
using System.Xml; 

namespace UpdateXmlRecord 
{ 
    public partial class Form1 : Form 
    { 
     private XmlDocument xDoc; 

     public Form1() 
     { 
      InitializeComponent(); 
      xDoc = new XmlDocument(); 
      xDoc.Load("file.xml"); 
     } 

     /// <summary> 
     /// Retrieve Xml Node 
     /// </summary> 
     /// <param name="sender"></param> 
     /// <param name="e"></param> 
     private void button1_Click(object sender, EventArgs e) 
     { 
      string id = txtId.Text; 
      string fName = "", lName = ""; 
      foreach (XmlElement element in xDoc.DocumentElement) 
      { 
       if (element.Name == "Customer" && element.Attributes["id"].Value == id) 
       { 
        foreach (XmlNode node in element) 
        { 
         if (node.Name == "FirstName") 
         { 
          fName = node.InnerText; 
         } 

         if (node.Name == "LastName") 
         { 
          lName = node.InnerText; 
         } 
        } 
       } 
      } 

      txtFName.Text = fName; 
      txtLName.Text = lName; 
     } 

     /// <summary> 
     /// Save Xml Node With Custom Value 
     /// </summary> 
     /// <param name="sender"></param> 
     /// <param name="e"></param> 
     private void button2_Click(object sender, EventArgs e) 
     { 
      string id = txtId.Text; 
      foreach (XmlElement element in xDoc.DocumentElement) 
      { 
       if (element.Name == "Customer" && element.Attributes["id"].Value == id) 
       { 
        foreach (XmlNode node in element) 
        { 
         if (node.Name == "FirstName") 
         { 
          node.InnerText = txtFName.Text; 
         } 

         if (node.Name == "LastName") 
         { 
          node.InnerText = txtLName.Text; 
         } 
        } 
       } 
      } 
      xDoc.Save("file.xml"); 
     } 
    } 
} 

希望它是有用的,喜歡它。 :)