Ricerca su file XML

mercoledì 17 giugno 2009 - 10.34

BlackJad Profilo | Newbie

RISOLTO!!!

l'errore era nella stringa dell'xpath

string xpathExpr = "/lista/indirizzo/email[email='" + email + "']";

Ora l'ho modificata in modo che la selezione avvenisse ricercando l'elemento "email" come nodo figlio di "indirizzo" ... e poi scegliendo il nodo stesso "email"

string xpathExpr = "/lista/indirizzo[email='" + email + "']/email";

Meno male ;)

---

Ciao a tutti ... ho un problemino ...

Scenario: ho un file XML che rappresenta una semplice banca-dati per gestire una mailing list.

Il file è così composto, con un elemento root (lista) e un numero arbitrario di figli (indirizzo) con i relativi nodi . . . ne riporto una sezione con pochi elementi:
<lista> <indirizzo> <codice>3kdEFns9</codice> <nominativo>Michele Ziparo</nominativo> <email>mikezip@gmail.com</email> <data_iscrizione>15/06/2009</data_iscrizione> <confermato>Si</confermato> </indirizzo> <indirizzo> <codice>8dEfCer7</codice> <nominativo>Federico Rondinelli</nominativo> <email>f.rondilelli@fm626.it</email> <data_iscrizione>14/05/2009</data_iscrizione> <confermato>Si</confermato> </indirizzo> <indirizzo> <codice>2adnf3dD</codice> <nominativo>Andrea Greco</nominativo> <email>andrea@greco.it</email> <data_iscrizione>16/06/2009</data_iscrizione> <confermato>Si</confermato> </indirizzo> <indirizzo> <codice>2yOGj3rB</codice> <nominativo>Report Concorrere</nominativo> <email>report@concorrere.it</email> <data_iscrizione>16/06/2009</data_iscrizione> <confermato>Si</confermato> </indirizzo> </lista>

Ora, tutto funziona tranquillamente, l'inserimento di nuovi indirizzi, l'aggiornamento dei nodi "confermato" . . . ecc ecc ecc . . . il mio problema nasce nel metodo che deve verificare se un indirizzo email è già presente.
Chiamo il metodo con questo codice:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

E questo è il codice che ho implementato per la verifica:
protected bool verifica_email_esistente(string email) { bool trovato = false; try { XmlDocument Doc = new XmlDocument(); Doc.Load(Server.MapPath("mdb-database/mailing_list.xml")); XmlElement element = Doc.DocumentElement; string xpathExpr = "/lista/indirizzo/email[email='" + email + "']"; XmlNode nodo = element.SelectSingleNode(xpathExpr); if (xpathExpr.Equals(email)) { trovato = true; return trovato; } } catch (Exception) { throw; } return trovato; }

Ecco . . . questo sistema non funziona . . . perchè gli indirizzi vengono continuamente inseriti, come se la verifica risultasse costantemente "false" . . .
cosa può essere?!?

chiccomox Profilo | Junior Member

Prova così: (l'ho scritto di botto senza testarlo!)

string xpathExpr = "/lista/indirizzo/email[email='" + email +"']"; XmlNodeList Nodi = element.SelectNodes(xpathExpr); if (Nodi.Count != 0) { trovato = true; return trovato; }


Chiccomox
http://www.dotnetpertutti.com
http://www.windowspertutti.com

BlackJad Profilo | Newbie

Grazie per la risposta ma come ho scritto nella modifica, ho risolto il problema

anche il codice che suggerisci tu è corretto, così come quello che usavo io, l'errore era nella stringa di ricerca ;)
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5