HTMLAgilityPack и разделение на - PullRequest
1 голос
/ 24 мая 2011

У меня есть html, который отделен <br/> например:

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

Какой самый простой способ получить информацию в 3 столбцах?

Я не XPathэксперт, поэтому другой подход будет разделять строку на разрыв строки, и просто работать с массивом.Есть ли более умный способ сделать это?

Обновление: забыл отформатировать код.

1 Ответ

3 голосов
/ 24 мая 2011

В чистом XPATH поверх XML вы должны использовать выражение XPATH, например: //preceding-sibling::br или //following-sibling::br (см. Здесь справку по Оси XPATH )

Но XPATHРеализация через HTML, которую вы найдете в Html Agility Pack, не поддерживает чистый текстовый узел или (узел атрибута) в выражениях выбора XPATH (//br/text() или //br/@blah не работают, например).Обратите внимание, что это работает в фильтрах, поэтому эти //br[text()='blah'] или //br[@att='blah'] работают.

Итак, вернемся к вопросу, вам нужно объединить XPATH и код, как-то так:

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

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

Это выдаст

Jack Janson
309 123 456
...