Visualizzazione dei risultati da 1 a 2 su 2

Discussione: Ricerca su XML

  1. #1

    Ricerca su XML

    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:
    codice:
    <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:
    codice:
    bool presente = verifica_email_esistente(email);
                if (presente == false)
                {
                     }
                else
                {
                    string message = "Questo indirizzo e-mail è già presente nell'elenco della mailing list!";
                    ClientScript.RegisterStartupScript(typeof(Page), "alert", "<script language=JavaScript>alert('" + message + "');</script>");
                    return;
                }
    E questo è il codice che ho implementato per la verifica:
    codice:
    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?!?

  2. #2

    [RISOLTO] Ricerca su XML

    Risolto

    L'errore era nella stringa dell'Xpath, l'ho sostituita con questa

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

    ed ora funziona tutto

    Ah ... anche nell'IF sotto ... prima ho copiato male, gli argomenti sn sbagliati ... nel codice sn presenti quelli corretti:

    codice:
    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 (nodo.InnerText.Equals(email))
                {
                    Response.Write("Indirizzo presente");
                    trovato = true;
                    return trovato;
                }
            }
            catch (Exception)
            {
                
                throw;
            }
            return trovato;
        }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.