2010-10-23 5 views
0

Je cherche à analyser certaines informations sur mon application. Disons que nous avons quelque part dans cette chaîne:Parsing big string (code HTML)

<tr class="tablelist_bg1"> 

<td>Beja</td> 

<td class="text_center">---</td> 

<td class="text_center">19.1</td> 

<td class="text_center">10.8</td> 

<td class="text_center">NW</td> 

<td class="text_center">50.9</td> 

<td class="text_center">0</td> 

<td class="text_center">1016.6</td> 

<td class="text_center">---</td> 

<td class="text_center">---</td> 

</tr> 

Tout reste qui est au-dessus ou en dessous de ce n'a pas d'importance. Rappelez-vous que tout est dans une chaîne. Je veux obtenir les valeurs dans les balises td: ---, 19.1, 10.8, etc. Il faut savoir qu'il y a beaucoup d'entrées comme celle-ci sur la page. Probablement aussi une bonne idée à link the page here.

Comme vous l'avez probablement deviné, je n'ai absolument aucune idée de comment faire cela ... aucune des fonctions que je sais que je peux effectuer sur l'aide de la chaîne (split, etc.).

Merci à l'avance

+0

En attendant ceux qui suggèrent RegEx – JustSid

+0

@JustSid Que utiliseriez-vous d'autre qui serait le rendre facile. Vous pouvez également utiliser jquery pour obtenir les valeurs et faire ce que vous devez faire. Je suppose que cela dépend vraiment de ce qu'il essaie d'accomplir – Matt

Répondre

1

Il suffit d'utiliser String.indexOf (string, int) pour trouver un "< td", encore une fois pour trouver le prochain ">", et encore à trouver "</td >". Ensuite, utilisez String.Substring pour extraire une valeur. Mettez ceci dans une boucle.

public static List<string> ParseTds(string input) 
    { 
     List<string> results = new List<string>(); 

     int index = 0; 

     while (true) 
     { 
      string next = ParseTd(input, ref index); 

      if (next == null) 
       return results; 

      results.Add(next); 
     } 
    } 

    private static string ParseTd(string input, ref int index) 
    { 
     int tdIndex = input.IndexOf("<td", index); 
     if (tdIndex == -1) 
      return null; 
     int gtIndex = input.IndexOf(">", tdIndex); 
     if (gtIndex == -1) 
      return null; 
     int endIndex = input.IndexOf("</td>", gtIndex); 
     if (endIndex == -1) 
      return null; 

     index = endIndex; 

     return input.Substring(gtIndex + 1, endIndex - gtIndex - 1); 
    } 
+0

Une très bonne réponse et facile à comprendre. – Qosmo

+0

.. Merci! .. – arx

0

En supposant que votre chaîne est valide XHTML, vous pouvez utiliser utiliser un analyseur XML pour obtenir le contenu que vous voulez. Il y a un simple example here qui montre comment utiliser XmlTextReader pour analyser le contenu XML. L'exemple lit à partir d'un fichier, mais vous pouvez le changer pour lire une chaîne:

new XmlTextReader(new StringReader(someString)); 

Vous voulez spécifiquement garder une trace des td nœuds d'élément, et le noeud de texte qui suit leur contiendra les valeurs que vous souhaitez.

0
  • utiliser une boucle à charger chaque ligne non vide du fichier dans une chaîne
  • Traiter la chaîne de caractères par caractère
    • Vérifier caractères indiquant le début de la balise td
    • utilisez une fonction de sous-chaîne ou faites simplement une nouvelle chaîne caractère par caractère pour obtenir tout le contenu jusqu'à ce que la balise </td> commence.