2017-03-16 6 views
0

idがないため、HTMLのテーブルの値を取得できません。私は2番目の列のすべての値を取得し、それらを配列に保持する必要があります。私は、ノードを選択する際HtmlAgilityPackと私の問題が来る使用しています:HtmlAgilityPackを使用してHTML上でIDなしのテーブルを解析する方法

Dim doc As HtmlDocument 
Dim web As New HtmlWeb() 
Dim str As String 

doc = Web.Load("http://www.dietas.net/tablas-y-calculadoras/tabla-de-composicion-nutricional-de-los-alimentos/carnes-y-derivados/aves/pechuga-de-pollo.html#") 

Dim nodes_filas As HtmlNode() = doc.DocumentNode.SelectNodes("//table[@id='']//tr").ToArray 
Dim nodes_columnas As HtmlNode() = doc.DocumentNode.SelectNodes("//td").ToArray 

For Each row As HtmlNode In nodes_filas 
    For Each column As HtmlNode In nodes_columnas 
     str = column.InnerHtml & vbCrLf 
    Next 
Next 

をこれはテーブルです:

<table cellspacing="1" cellpadding="3" width="100%" border="0"> 
    <tr> 
    <td colspan="2" style="font-size:13px;color:#55711C;padding-bottom:5px;">Aporte por raci&oacute;n</td> 
    </tr> 
    <tr style="background-color:#EBEBEB"> 
    <td width="125">Energ&iacute;a [Kcal]</td> 
    <td class="td_right">145,00</td> 
    </tr> 
    <tr> 
    <td>Prote&iacute;na [g]</td> 
    <td class="td_right">22,20</td> 
    </tr> 
    <tr style="background-color:#EBEBEB"> 
    <td>Hidratos carbono [g]</td> 
    <td class="td_right">0,00</td> 
    </tr> 
    <tr> 
    <td>Fibra [g]</td> 
    <td class="td_right">0,00</td> 
    </tr> 
    <tr style="background-color:#EBEBEB"> 
    <td>Grasa total [g]</td> 
    <td class="td_right">6,20</td> 
    </tr> 
    <tr> 
    <td>AGS [g]</td> 
    <td class="td_right">1,91</td> 
    </tr> 
    <tr style="background-color:#EBEBEB"> 
    <td>AGM [g]</td> 
    <td class="td_right">1,92</td> 
    </tr> 
    <tr> 
    <td>AGP [g]</td> 
    <td class="td_right">1,52</td> 
    </tr> 
    <tr style="background-color:#EBEBEB"> 
    <td>AGP /AGS</td> 
    <td class="td_right">0,79</td> 
    </tr> 
    <tr> 
    <td>(AGP + AGM)/AGS</td> 
    <td class="td_right"> 1,80</td> 
    </tr> 
    <tr style="background-color:#EBEBEB"> 
    <td>Colesterol [mg]</td> 
    <td class="td_right">62,00</td> 
    </tr> 
    <tr> 
    <td>Alcohol [g]</td> 
    <td class="td_right">0,00</td> 
    </tr> 
    <tr style="background-color:#EBEBEB"> 
    <td>Agua [g]</td> 
    <td class="td_right">71,60</td> 
    </tr> 
</table> 

答えて

0

私はVBがインストールされていない申し訳ありませんが、C#バージョンはあなたを与えるのに十分でなければなりませんアイデア。 td_rightクラスがある場合は、ラムダまたはxpathのいずれかを使用してそれを照会することができます。 私はlinqに慣れているので、私はlambda/linqバージョンが好きです。私はXPATH構文を覚える必要はありません。

ラムダ:

public static bool HasClass(this HtmlNode node, params string[] classValueArray) 
    { 
     var classValue = node.GetAttributeValue("class", ""); 
     var classValues = classValue.Split(' '); 
     return classValueArray.All(c => classValues.Contains(c)); 
    } 

var url = "http://www.dietas.net/tablas-y-calculadoras/tabla-de-composicion-nutricional-de-los-alimentos/carnes-y-derivados/aves/pechuga-de-pollo.html#"; 
     var htmlWeb = new HtmlWeb(); 
     var htmlDoc = htmlWeb.Load(url); 
     var nodes = htmlDoc.DocumentNode.Descendants("td").Where(_ => _.HasClass("td_right")).Select(_ => _.InnerText); 

XPATH:

var nodes2 = htmlDoc.DocumentNode.SelectNodes("//td[@class='td_right']"); 
+0

完璧なソリューション!どうもありがとうございます! –

関連する問題