HTML Agility Pack: come accedere agli attributi HTML?

c# html html-agility-pack parsing

Domanda

Ho seguito il codice html:

<tr>
    <td headers="header1"><b><a href="www.site.com">TITLE </a></b></td>
    <td headers="header2"></td>
    <td headers="header3" class="centrato">23/04/2014</td>
</tr> 

Ho bisogno di memorizzare in un datatable:

<tr>
    <td headers="header1"><b><a href="www.site.com">TITLE </a></b></td>
    <td headers="header2"></td>
    <td headers="header3" class="centrato">23/04/2014</td>
</tr> 

Ho provato questo:

<tr>
    <td headers="header1"><b><a href="www.site.com">TITLE </a></b></td>
    <td headers="header2"></td>
    <td headers="header3" class="centrato">23/04/2014</td>
</tr> 

Questo codice mi consente di aggiungere tutti i titoli nel datatable ma non sono in grado di aggiungere DATE e HREF, puoi aiutarmi per favore?

Risposta accettata

Puoi fare in questo modo:

//select all `<tr>` that contains specific `<td>`
foreach (HtmlNode node in tmlDoc.DocumentNode.SelectNodes("//tr[td[@headers='header1']]"))
{
    table.Rows.Add();
    //get <td headers='header1'> in current <tr>
    var header1 = node.SelectSingleNode("./td[@headers='header1']");

    table.Rows[i]["Title"] = header1.InnerText;
    //get <a> in header1 then get it's href attribute value
    table.Rows[i]["Link"] = header1.SelectSingleNode(".//a").GetAttributeValue("href", "");
    //get innerText of <td headers='header1'> in current <tr>
    table.Rows[i]["Post"] = node.SelectSingleNode("./td[@headers='header3']").InnerText;
    i++;
}

Risposta popolare

InnerText ti fornisce solo il testo tra il Tag. per accedere a Href o Id o ... è necessario utilizzare il metodo GetAttributeValue .

int i = 0;
foreach (HtmlNode node in tmlDoc.DocumentNode.SelectNodes("//tr"))
{
    table.Rows.Add();
    table.Rows[i]["Link"] = node.SelectSingleNode("//a").GetAttributeValue("href", "");
    table.Rows[i]["Title"] = node.SelectSingleNode("//a").InnerText;
    table.Rows[i]["Date"] = node.SelectSingleNode("//td[@headers='header3']").InnerText;
    i++;
}



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché