Pergunta

Usar o pacote de agilidade HTML é ótimo para obter descendentes e mesas inteiras etc ... mas como você pode usá -lo na situação abaixo

...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....

Como você conseguiu encontrar se Miles era menor que 15 neste caso, eu me destaquei, você poderia fazer algo com elementos, mas você precisaria obter todos os elementos encontrarem o correto e depois encontrar o número apenas para verificar seu valor? Ou há como usar o Regex com o Agility Pack para conseguir isso de uma maneira melhor ...

Foi útil?

Solução

Tenho certeza (não verifiquei) que ele suporta o following-sibling:: eixo, então você poderia qualquer Encontre o nó "dt[.='Distance:']" e então encontre node.SelectSingleNode("following-sibling::dd[1]") - ou (mais simples) basta usar node.NextSibling Se você tem certeza de que o dd sempre segue imediatamente o dt.

Por exemplo:

string distance = doc.DocumentNode.SelectSingleNode(
          "//dt[.='Distance:']/following-sibling::dd").InnerText;

Outras dicas

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;          
    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top