2010-10-20 16 views
0

J'ai besoin d'analyser une valeur de sélection dans un fichier html. J'ai ce fichier html:Analyser une combox HTML en C#

<html> 
<head></head> 
<body> 
    <select id="region" name="region"> 
     <option value="0" selected>Všetky regiony</option> 
     <optgroup>Banskobystrický kraj</optgroup> 
     <option value="k_1">Banskobystrický kraj</option> 
     <option value="1">Banská Bystrica</option> 
     <option value="3">Banská Štiavnica</option> 
     <option value="18">Brezno</option> 
     <option value="22">Detva</option> 
     <option value="58">Dudince</option> 
    </select> 
</body> 
</html> 

J'ai besoin d'obtenir la valeur de l'option et la valeur du texte dans le dictionnaire. Je charge ce fichier dans le composant webBrowser en essayant d'obtenir la balise select par ID "region".

 webBrowser1.Url = new Uri("file://\\C:\\1.html"); 

     if (webBrowser1.Document != null) 
     { 
      HtmlElement elems = webBrowser1.Document.GetElementById("region"); 
     } 

Mais l'objet elems est nul, je ne sais pas pourquoi. Toute avance?

EDIT: Le problème a été résolu avec Html Agillity Pack. Merci pour tout le monde. J'étais stupide, je devais plutôt écouter vos conseils avec Html Agillity Pack en premier.

+0

Copie possible de http://stackoverflow.com/questions/100358/looking-for-c-html-parser. –

Répondre

0

Vous pouvez le faire avec le HtmlAgilityPack. Il y a beaucoup d'exemples de l'utiliser pour analyser le HTML. Vous pouvez trouver via une recherche google. Voici quelques-unes:

http://htmlagilitypack.codeplex.com/wikipage?title=Examples&referringTitle=Home

How to use HTML Agility pack

MISE À JOUR:

Bien que je pense en utilisant la bibliothèque est un meilleur choix, vous pouvez le faire avec le contrôle WebBrowser de la manière suivante :

webBrowser1.DocumentCompleted += 
      new WebBrowserDocumentCompletedEventHandler(ParseOptions); 

    webBrowser1.Url = new Uri("C:\\1.html", UriKind.Absolute); 

    private void ParseOptions(object sender, 
     WebBrowserDocumentCompletedEventArgs e) 
    { 
     HtmlElement elems = webBrowser1.Document.GetElementById("region"); 
    } 

Notez que l'analyse est effectuée dans t le gestionnaire d'événements DocumentCompleted.

+0

Je ne veux pas utiliser une bibliothèque de troisième partie –

+2

@Tom: Et pourtant vous instancier une instance WebBrowser? Il n'y a pas de façon standard d'analyser le HTML, pour de bonnes raisons. Vous n'avez pas d'autre choix que d'utiliser une bibliothèque tierce, WebBrowser étant l'implémentation de Microsoft. –

+0

Merci d'avance, avec Html Agillity Pack ça marche bien. –

0

Html Agility Pack est un analyseur syntaxique HTML excellent.

+0

Merci d'avance, j'utilise Html Agillity Pack. Je regarde la chèvre et fonctionne bien. –