1

HTMLAgilityPackを使用してHTMLを解析しようとしています。次のコードスニペットは、必要な情報を含むテーブル要素を選択しますが、テーブルをさらに深く掘り下げる必要があります。

テーブルのInnerHtmlを取得したら、<td>たとえば、「フィールド#2」の内部テキスト値を持つを探す予定です。しかし、次に、NEXTの内部テキストを選択する必要があります<td>。この例では、値110が必要です。それ、どうやったら出来るの?

foreach (var x in doc.DocumentNode.SelectNodes("//table[contains(@class,'data')]"))
{
     // psuedo code - search for td and use "contains" on the inner text / html.
     // Then, grab the next td inner html.

     Console.WriteLine(x.InnerHtml);
}


  <tr>
    <td width="158"><strong>Field #1:</strong></td>
    <td  width="99">1</td>
    <td  width="119"><strong>Field #2:</strong></td>
    <td  width="176">110</td>
  </tr>
  <tr>
    <td width="158"><strong>Field #3:</strong></td>
    <td  width="99">85</td>
    <td  width="119"><strong>Field #4:</strong></td>
    <td  width="176">-259.34</td>
  </tr>
  <tr>
    <td width="158"><strong>Field #5:</strong></td>
    <td  width="99">1</td>
    <td  width="119"><strong>Field #6:</strong></td>
    <td  width="176">110</td>
  </tr>
  <tr>
    <td width="158"><strong>Field #7:</strong></td>
    <td  width="99">12</td>
    <td  width="119"><strong>Field #8:</strong></td>
    <td  width="176">123.23</td>
  </tr>
4

2 に答える 2

1

敏捷性パックがそれをサポートしているかどうかはわかりませんが、XPathでは、次を使用して次の兄弟を照会できます/following-sibling

doc.DocumentNode.SelectNodes(
    "//table[contains(@class,'data')]/tr/" +
       "td[/strong/text()='Field #2:']" + 
       "/following-sibling:td");

基本的に-指定されたテキストを持つすべてのtdノードを見つけて、次の兄弟tdノードを教えてください。

于 2012-10-03T02:53:06.340 に答える
1

このコードは、目的のtd行を返します。

//<td  width="176">110</td>
var td = x.SelectNodes("//td").SkipWhile(g => !g.InnerText.Contains("Field #2:")).Select(s => s).Skip(1).FirstOrDefault(); 
于 2012-10-03T03:38:29.890 に答える