0

这样我可以获得记录的详细信息,我想知道如何编辑值并将其更新到同一记录?

如何检查属性中的唯一值?

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>
4

3 回答 3

1

例如,我只使用 2 个子节点(名字,姓氏)。我将file.xml与exe文件放在同一目录中,这是代码:

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");
        }
    }
}

希望对您有所帮助,享受它。:)

于 2012-08-11T22:11:13.190 回答
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);
}
于 2012-08-11T21:20:27.937 回答
0

您可以散列节点的内容并将散列附加到生成的 XML。散列将是唯一的,足以充当您记录的“主键”。

于 2012-08-11T21:16:46.327 回答