C#Linq to XML检查元素是否存在

我有一个XML文档如下:

  "+447528349828" "09/06/24 13:35:01" "Stop"   "+447528349828" "09/06/24 13:35:01" "Stop"   

我正在尝试检查文档中是否存在父SMS节点的数字子节点(出于validation目的,以避免插入重复数据)。

关于潜在解决方案的任何建议?

编辑:元素将与输入字符串进行比较。 例如if(inputNumber == xmlDocNumber){//不插入新元素}

我建议使用Count()稍微不同一点 – 使用Any() 。 优点是Any()可以在任何匹配时立即停止:

 var smsWithNoNumber = main.Descendants("SMS") .Where(x => !x.Elements("Number").Any()); 

在这种情况下,它不会有太大的可能性,但是在Count()可能需要计算一百万次点击只是为了告诉你至少有一次,这是一个有用的技巧。 我会说这也是你所说的更明确的指标。

假设您的数字是某种规范化forms,并且您的XML被加载到XmlDocument或其中一些,最简单的非LINQ方法是使用XPath查询:

 string pattern = String.Format("/Database/SMS/Number[. = '{0}']", number); if (myDoc.SelectSingleNode(pattern) != null) { // number already exists in document } 

您可以通过循环SMS节点应用XSL文档来转换数据,并排除任何具有重复的Number / text()值的文档

检查将是这样的:

    .....include a copy of node......