HTMLAgilityPack et la séparation sur

html-agility-pack

Question

J'ai du code HTML séparé par <br/> par exemple:

Jack Janson
<br/>
309 123 456
<br/>
My Special Street 43

Quel est le moyen le plus simple de récupérer les informations sur 3 colonnes?

Je ne suis pas un expert XPath, une autre approche consisterait à séparer la chaîne sur le saut de ligne et à ne travailler qu'avec le tableau. Y a-t-il une façon plus intelligente de le faire?

Mise à jour: oublié de formater le code.

Réponse acceptée

Dans XPATH sur XML pur, vous utiliseriez une expression XPATH comme celle-ci: //preceding-sibling::br previous //preceding-sibling::br ou //following-sibling::br following //following-sibling::br (voir ici pour obtenir de l'aide sur XPATH Axes )

Mais l'implémentation XPATH over HTML que vous trouverez dans Html Agility Pack ne prend pas en charge les nœuds de texte purs ou (nœud d'attribut) dans les expressions de sélection XPATH ( //br/text() ou //br/@blah ne fonctionnent Exemple). Notez que cela fonctionne dans les filtres, donc, ces //br[text()='blah'] ou //br[@att='blah'] fonctionnent.

Donc, revenons à la question, vous devez combiner XPATH et du code, quelque chose comme ceci:

HtmlDocument doc = new HtmlDocument();
doc.Load(myHtmlFile);

foreach (HtmlNode p in doc.DocumentNode.SelectNodes("//br"))
{
    Console.WriteLine(p.PreviousSibling.InnerText.Trim());
}

Cela produira

Jack Janson
309 123 456



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi