WindowChromeのSample HelpDesk

WindowChromeのSampleとして作成したHelpDeskシステムをご照会します


3.LINQ to XML


LINQ to XML とは、SQL と同じような記述方法で、XML の操作をする方法です。 プログラマーは、短時間の学習で簡潔かつ強力なクエリの記述が可能となります。
名前空間とは、クラスを階層的に分類するための機構で、ファイル整理のためのフォルダ分けです。
LINQ to XMLを使う場合は、「using System.Xml.Linq;」を記述します。

読込み

private void Read()
{
     XDocument xmlDoc = XDocument.Load(GstrPath);
     try
    {
       var tweets = (from entry in xmlDoc.Descendants("helpdesk")
           .Where(node => (string)node.Attribute("receiptnumber") == GstrReceiptnumber)
           .Where(node => (string)node.Attribute("number") == GstrNumber)
           .Where(node => (string)node.Element("title") == GstrTitle)
           select new
           {
              CorrespondingCompany = entry.Attribute("correspondingcompany").Value,
              ReceiptNumber = entry.Attribute("receiptnumber").Value,
              Number = entry.Attribute("number").Value,
              ReceiptDate = entry.Attribute("receiptdate").Value,
              Completingdate = entry.Attribute("completingdate").Value,
              State = entry.Attribute("state").Value,
              Company = entry.Element("company").Value,
              Customer = entry.Element("customer").Value,
              MailAddress = entry.Element("mailaddress").Value,
              ProductName = entry.Element("productname").Value,
              Title = entry.Element("title").Value,
              Inquiry = entry.Element("inquiry").Value,
              Correspondence = entry.Element("correspondence").Value,
            }
          );

        foreach (var k in tweets)
        {
           txtCorrespondingCompany = k.CorrespondingCompany;
           txtReceiptNumber = k.ReceiptNumber;
           txtNumber = k.Number;
           txtReceiptDate = k.ReceiptDate;
           txtCompletingDate = k.Completingdate;
           txtState = k.State;
           txtCompany = k.Company;
           txtCustomer = k.Customer;
           txtMailAddress = k.MailAddress;
           txtProductName = k.ProductName;
           txtTitle2 = k.Title;
           txtInquiry = k.Inquiry;
           txtInquiry = txtInquiry.Replace("\n", "\r\n");
           txtCorrespondence = k.Correspondence;
           txtCorrespondence = txtCorrespondence.Replace("\n", "\r\n");
           break;
         }
         //-----------------------------------
         tweets = null;
         xmlDoc = null;
         //-----------------------------------
      }
      catch
      {
      }
}

挿入

var xelm = XElement.Load(GstrPath);
   var p = new XElement("helpdesk",
   new XAttribute("correspondingcompany", txtCorrespondingCompany),
           new XAttribute("receiptnumber", txtReceiptNumber),
           new XAttribute("number", txtNumber),
           new XAttribute("receiptdate", txtReceiptDate),
           new XAttribute("completingdate",txtCompletingDate),
           new XAttribute("state", txtState),
           new XElement("company", txtCompany),
           new XElement("customer", txtCustomer),
           new XElement("mailaddress", txtMailAddress),
           new XElement("productname", txtProductName),
           new XElement("title", strTitle),
           new XElement("inquiry", txtInquiry),
           new XElement("correspondence", txtCorrespondence)
        );
        xelm.Add(p);
        xelm.Save(GstrPath);

更新

var xelm = XElement.Load(GstrPath);
   var tweets = from entry in xelm.Descendants("helpdesk")
       //照会したキーで再度検索する
       .Where(node => (string)node.Attribute("receiptnumber") == GstrReceiptnumber)
       .Where(node => (string)node.Attribute("number") == GstrNumber)
       .Where(node => (string)node.Element("title") == GstrTitle)
       select entry;

       foreach (var help in tweets)
       {
         help.Attribute("correspondingcompany").Value = txtCorrespondingCompany;
         help.Attribute("receiptnumber").Value = txtReceiptNumber;
         help.Attribute("number").Value = txtNumber;
         help.Attribute("receiptdate").Value = txtReceiptDate;
         help.Attribute("completingdate").Value = txtCompletingDate;
         help.Attribute("state").Value = txtState;
         help.Element("company").Value = txtCompany;
         help.Element("customer").Value = txtCustomer;
         help.Element("mailaddress").Value = txtMailAddress;
         help.Element("productname").Value = txtProductName;
         help.Element("title").Value = txtTitle2;
         help.Element("inquiry").Value = txtInquiry;
         help.Element("correspondence").Value = txtCorrespondence;
         xelm.Save(GstrPath);
         //
         GstrReceiptnumber = txtReceiptNumber;
         GstrNumber = txtNumber;
         GstrTitle = txtTitle2;
    }

削除

var xelm = XElement.Load(strPath);
var tweets = from entry in xelm.Descendants("helpdesk")
     .Where(node => (string)node.Attribute("receiptnumber") == txtReceiptNumber)
     .Where(node => (string)node.Attribute("number") == txtNumber)
     
tweets.Remove();
xelm.Save(strPath);