HTTP Agily Pack - доступ к братьям?
-
26-09-2019 - |
Вопрос
Использование пакета Agility HTML отлично подходит для получения потомков и целых таблиц и т. Д. ... Но как вы можете использовать его в ситуации ниже
...Html Code above...
<dl>
<dt>Location:</dt>
<dd>City, London</dd>
<dt style="padding-bottom:10px;">Distance:</dt>
<dd style="padding-bottom:10px;">0 miles</dd>
<dt>Date Issued:</dt>
<dd>26/10/2010</dd>
<dt>type:</dt>
<dd>cement</dd>
</dl>
...HTML Code below....
Как вы могли найти, если в этом случае МИЛСА было меньше 15, я бы преданно вы могли бы сделать что-то с элементами, но вы должны были бы получить все элементы, найдут правильный, а затем найдите номер, чтобы проверить его значение? Или есть способ использовать Regex с Agily Pack для достижения этого лучше ...
Решение
Я почти уверен (не проверил), что он поддерживает following-sibling::
ось, так что вы могли бы либо Найти узел "dt[.='Distance:']"
а потом найти node.SelectSingleNode("following-sibling::dd[1]")
- или (проще) просто использовать node.NextSibling
Если вы уверены, что dd
всегда сразу следует dt
.
Например:
string distance = doc.DocumentNode.SelectSingleNode(
"//dt[.='Distance:']/following-sibling::dd").InnerText;
Другие советы
Get just html simblings
public static List<HtmlNode> GetHtmlNodeList(string html)
{
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
var regs = doc.DocumentNode.SelectSingleNode("//div");
var first = regs.Descendants().FirstOrDefault();
var second = first.NextSibling;
List<HtmlNode> list = new List<HtmlNode>();
while (second != null)
{
list.Add(second);
second = CheckSibling(second);
}
return list;
}
private static HtmlNode CheckSibling(HtmlNode node)
{
node = node.NextSibling;
return node;
}