2017-03-04 49 views
2

XMLの重複要素をチェックしたいと思います。助けてください!C#:XMLの重複要素のチェック

XML:

<?xml version="1.0" encoding="utf-8"?> 
<List> 
    <Email_Entry></Email_Entry> 
    <Email_Entry EmailID="[email protected]" /> 
    <Email_Entry EmailID="[email protected]" /> 
    <Email_Entry EmailID="[email protected]" /> 
    <Email_Entry EmailID="[email protected]" /> 
    <Email_Entry EmailID="[email protected]" /> 
</List> 

aspx.cs:代わりに、要素の

protected void btnEmailSubscribe_Click(object sender, EventArgs e) 
{    
    string EmailID = txtEmailSubscribe.Text; 
    string FILE_PATH = Server.MapPath("~/Logs/SubscribedEmails.xml"); 

    XDocument Emailxml = XDocument.Load(FILE_PATH); 
    var EmailExist = Emailxml.Descendants("Email_Entry") 
     .Any(x => (string)x.Element("EmailID") == txtEmailSubscribe.Text); 
    if (EmailExist) 
    { 
     lblEmail.Text = "EmailID already exist"; 
    } 
    else 
    { 
     Emailxml.Root.Add(new XElement("Email_Entry", 
        new XAttribute("EmailID", EmailID) 
       )); 
     Emailxml.Save(FILE_PATH); 
     lblEmail.Text = "Subscribed Successfully"; 
    }    
} 

答えて

2

チェック属性値:

var EmailExist = Emailxml.Descendants("Email_Entry") 
     .Any(x => x.Attribute("EmailID").Value == txtEmailSubscribe.Text); 
+0

Anyの代わりにする必要があります。いずれもtrue/falseを返します。 – jdweng

+0

@jdwengメールが存在することを確認します。私は「Any」を使用します – Backs

+0

@Backsあなたのヘルプをありがとう!!!!!!! –

0

するvar xmlの= File.ReadAllText( "あなたのxmlファイルのパス");

 var xmlDoc = new XmlDocument(); 
     xmlDoc.LoadXml(xml); 

     var dups = xmlDoc.FirstChild.ChildNodes 
      .Cast<XmlNode>() 
      .Where(n=>n.Attributes.Count>0) 
      .GroupBy(n => n.Attributes["EmailID"].Value) 
      .Where(g => g.Count() > 1) 
      .SelectMany(g => g.ToList()) 
      .ToList();