Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    [C#] Problema con REGEX

    Salve a tutti, sto cercando di recuperare alcuni dati da una pagina web usando un'espressione regolare.

    Il pezzo di pagina html è il seguente:

    codice:
    ...
    ...
      <td class="Content_Chiaro"> 
          
    
    
             TESTO        
             </p>
     </td>
    ...
    ...
    Da cui ovviamente voglio estrarre il testo contenuto tra

    e </p>.
    Qualche suggerimento? Per ora ho scritto questo pezzetto, giusto per fare una prova

    codice:
    Regex expression = new Regex("
    
    (.*?)\n{1}</p>" );
    var results = expression.Matches(result);
    foreach (Match match in results)
    { 
        Console.WriteLine("VALUE: " + match.Value);
    }
    Mi aspettavo che mi estraesse tutti i paragrafi della pagina ma non estrae nulla invece... Cosa mi sfugge? Grazie
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  2. #2
    Tip: le regex sono una pessima idea per fare parsing dell'HTML, dato che questo ha una grammatica più complessa di quelle esprimibili via regex (il problema fondamentale è la nidificazione dei tag); ti consiglio invece di impiegare un parser di "tag soup" (come viene definito l'HTML non valido che costituisce il 90% del web ) come questo, che effettua un parsing "rilassato" dell'HTML fornito e ti restituisce una struttura DOM che puoi interrogare in maniera semplice.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Grazie per il link, sembra molto interessante!
    Domani faccio qualche prova, grazie ancora!
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Ho scaricato HAP e ho aggiunto la dll tra le reference del mio progetto ma Visual Studio mi sputa in faccia l'errore "A reference to a higher version or incompatible assembly cannot be added to the project"

    Uso Visual Studio 2012 Express for Windows Phone e il progetto è un progetto Windows Phone 7.1. Ho risolto facendo tasto destro sulla dll e clickando, dalle proprietà, "Unblock". Non ho capito il perché... L'errore non mi pare si riferisca a blocchi di sicurezza ecc.

    Comunque adesso gioco un po' con la libreria
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    E' veramente una figata di libreria!

    Ho notato una cosa però: nella console ogni tanto mi appare la scritta

    "'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): Loaded 'C:\Data\Programs\{8E3A30D5-99A4-43D3-81A9-03F55C74EDB8}\Install\System.Xml.XPath.DLL'. Cannot find or open the PDB file."

    (dove System.Xml.XPath.DLL è una delle dll di Silverlight che ho dovuto aggiungere al progetto).

    L'app per funzionare funziona, il messaggio è ignorabile?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    È il debugger che nota che viene caricata la dll di XPath, ma non ne ha i simboli di debug; nulla di grave, è roba che riguarda esclusivamente il debugger, non la tua applicazione.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Perfetto, grazie

    ora non ho il codice sotto mano, domani mattina posto la soluzione che ho trovato, magari è utile a qualcuno
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  9. #9
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Ecco qua.

    codice:
    HtmlDocument doc = new HtmlDocument();
    doc.LoadHtml(e.Result); // e.Result contiene il codice della pagina scaricata
    
    var nodes = doc.DocumentNode
                          .SelectNodes("//td")
                          .Where(x => x.Attributes["class"] != null
                                       && x.Attributes["class"].Value.Equals("Content_Chiaro")
                                       && x.Attributes.Count == 1);
    
    selectedItem.Content = nodes.ElementAt(0).InnerHtml.Trim();
    Eseguito questo, in Content avro' la stringa

    TESTO</p>, per ora mi va bene
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

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 © 2025 vBulletin Solutions, Inc. All rights reserved.