Da C # Linq a XML verificare se esiste un elemento

Ho un documento XML come segue:

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

Sto cercando di verificare se il numero del nodo figlio del nodo SMS genitore esiste nel documento (a scopo di validazione per evitare di inserire dati duplicati).

Qualche consiglio su una potenziale soluzione?

EDIT: l’elemento verrà confrontato con una stringa di input. Ad esempio if (inputNumber == xmlDocNumber) {// Non inserire un nuovo elemento}

Suggerirò una virata leggermente diversa all’utilizzo di Count() – usa Any() . Il vantaggio è che Any () può fermarsi non appena ottiene alcuna corrispondenza:

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

In questo caso non farà molte probabilità, ma nei casi in cui Count() potrebbe contare un milione di colpi solo per dirti che ce n’era almeno uno, è un trucco utile da sapere. Direi che è anche un indicatore più chiaro di ciò che intendi.

Supponendo di avere il tuo numero in qualche forma canonica e il tuo XML è caricato in un XmlDocument o in alcuni di essi, il modo più semplice non LINQ per farlo è con una query XPath:

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

È ansible applicare un documento XSL che traduca i dati eseguendo il ciclo attraverso i nodes SMS ed escludendo quelli che hanno un valore Numero / testo () duplicato

Controllare sarebbe qualcosa di simile:

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