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