0

以下のコードはcustomerRecord、Xml ファイルに a を追加する関数です。ここで 2 つの質問があります。

id1.レコードを追加するとき、およびの値がMobileXMLにすでに存在するかどうかを確認する方法は?? 2.または
で顧客を検索し、 ??に値を表示する方法idMobiletextboxes

private const string FileName = @"C:\test\Person.xml";

private void button1_Click(object sender, EventArgs e)
{    
    var xmlDoc = new XmlDocument();

    xmlDoc.Load(FileName);

    var subRoot = xmlDoc.CreateElement("Customer");
    subRoot.SetAttribute("id", textBox6.Text.Trim());

    var firstName = xmlDoc.CreateElement("FirstName");
    var xmlTextUserName = xmlDoc.CreateTextNode(textBox1.Text.Trim());
    firstName.AppendChild(xmlTextUserName);
    subRoot.AppendChild(firstName);
    if (xmlDoc.DocumentElement != null) 
        xmlDoc.DocumentElement.AppendChild(subRoot);

    var email = xmlDoc.CreateElement("LastName");
    var xmlTextEmail = xmlDoc.CreateTextNode(textBox2.Text.Trim());
    email.AppendChild(xmlTextEmail);
    subRoot.AppendChild(email);
    if (xmlDoc.DocumentElement != null) 
        xmlDoc.DocumentElement.AppendChild(subRoot);

    var mobile = xmlDoc.CreateElement("Mobile");
    var xmlTextMobile = xmlDoc.CreateTextNode(textBox3.Text.Trim());
    mobile.AppendChild(xmlTextMobile);
    subRoot.AppendChild(mobile);
    if (xmlDoc.DocumentElement != null)
        xmlDoc.DocumentElement.AppendChild(subRoot);

    var address = xmlDoc.CreateElement("Address");
    var xmlTextAddress = xmlDoc.CreateTextNode(textBox4.Text.Trim());
    address.AppendChild(xmlTextAddress);
    subRoot.AppendChild(address);
    if (xmlDoc.DocumentElement != null) 
        xmlDoc.DocumentElement.AppendChild(subRoot);

    var country= xmlDoc.CreateElement("Country");
    var xmlTextCountry = xmlDoc.CreateTextNode(textBox5.Text.Trim());
    country.AppendChild(xmlTextCountry);
    subRoot.AppendChild(country);
    if (xmlDoc.DocumentElement != null)
        xmlDoc.DocumentElement.AppendChild(subRoot);

    xmlDoc.Save(FileName);
    if (File.Exists(FileName)) 
        return;

    var textWritter = new XmlTextWriter(FileName, null);
    textWritter.WriteStartDocument();
    textWritter.WriteStartElement("CustomerRecord");
    textWritter.WriteEndElement();
    textWritter.Close();
}
//Search by id or by Mobile
private void button3_Click(object sender, EventArgs e)
{

}

サンプル XML:

<CustomerRecord>
  <Customer id="6786">
    <FirstName>khkjh</FirstName>
    <LastName>jkhjkh</LastName>
    <Mobile>887897</Mobile>
    <Address>jk</Address>
    <Country>fdgfdg</Country>
  </Customer>
</CustomerRecord>
4

2 に答える 2

2

XML ドキュメントを解析 (読み取り/検索/操作) する方法 (DataSet/DataTable、DOM、XmlSerialization) はいくつかありますが、私が提案したいのはLINQ-XML.

XDocument doc = XDocument.Load(file);

string id="21";
XElement element = doc.Descendants("Customer")
                   .Where(p => p.Attribute("id").Value == id).FirstOrDefault();
if (element != null)
 {
  //found
   string firstName = (string)element.Element("FirstName");
   string mobile = (string)element.Element("Mobile");
 }
else
 {
  //Not found
  //To add a customer
   var ele = new XElement("Customer");
   ele.SetAttributeValue("id", id);
   ele.Add(new XElement("FirstName", firstName));
   ele.Add(new XElement("Mobile",mobile));
   doc.Root.Add(ele);
   doc.Save(file);
 }
于 2012-08-09T07:14:33.263 に答える
0

XML スキーマ自体と同様のオブジェクトを作成し、そのオブジェクトを他の操作に使用できます。

XML スキーマからのオブジェクトの作成 - XML を C# オブジェクトにマップする方法

たとえば、下から始めます。

// Create a Customer class.
public class Customer
{
    public string FirstName {get; set;}
    public string LastName {get; set;}
    public string Mobile {get; set;}
    public string Address {get; set;}
    public string Country {get; set;}
}

// Create a CustomerRecord class.
public class CustomerRecord
{
    public Customer customer {get; set;}
    public int Id {get; set;}
}

// Create a collection of CustomerRecords
public List<CustomerRecord> custRecords {get; set;}

次に行う必要があるのは、XML をトラバースし、各値をオブジェクトに追加することです。xml は常にオブジェクトとして手元に置いておくことをお勧めします。これは、将来どのような操作が必要になるか分からないためです。

現時点でいくつかの検証または検索操作を実行する必要がある場合は、List オブジェクト自体で簡単に実行できます。

于 2012-08-09T07:35:13.407 に答える