HTMLAgilityPack и разделение на

html-agility-pack

Вопрос

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

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

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

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

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

Принятый ответ

В чистом 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


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow