Http Agility Pack - Accesso ai fratelli?
-
26-09-2019 - |
Domanda
Uso della Agility pacchetto HTML è grande per ottenere discendenti e tabelle integrali, ecc ... ma come si può utilizzare in seguito situazione
...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....
Come si potrebbe trovare se miglia era inferiore a 15, in questo caso, io undestand si potrebbe fare qualcosa con gli elementi, ma avrei dovete ottenere tutti gli elementi trovano il giusto uno e poi trovare il numero solo per controllare il suo valore? O è che ci sono modo per utilizzare espressioni regolari con agilità in valigia per raggiungere questo obiettivo in un modo migliore ...
Soluzione
Sono abbastanza sicuro (non hanno controllato) che supporta l'asse following-sibling::
, così da poter o trovare il "dt[.='Distance:']"
nodo e poi trovare node.SelectSingleNode("following-sibling::dd[1]")
- o (più semplice) proprio uso node.NextSibling
se sono sicuro che il dd
segue sempre immediatamente l'dt
.
Ad esempio:
string distance = doc.DocumentNode.SelectSingleNode(
"//dt[.='Distance:']/following-sibling::dd").InnerText;
Altri suggerimenti
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;
}