Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何选择下一个<;td>;元素?_C#_.net 4.0_Html Parsing_Html Agility Pack - Fatal编程技术网

C# 如何选择下一个<;td>;元素?

C# 如何选择下一个<;td>;元素?,c#,.net-4.0,html-parsing,html-agility-pack,C#,.net 4.0,Html Parsing,Html Agility Pack,我正在尝试使用HTML敏捷包解析一些HTML。下面的代码片段选择了包含我需要的信息的table元素,但我需要深入挖掘该表 一旦获得了表的InnerHtml,我计划查找一个innertext值为“Field#2”的。但是,我需要选择下一个的内部文本。在本例中,我需要值110。我该怎么做 foreach (var x in doc.DocumentNode.SelectNodes("//table[contains(@class,'data')]")) { // psuedo code -

我正在尝试使用HTML敏捷包解析一些HTML。下面的代码片段选择了包含我需要的信息的table元素,但我需要深入挖掘该表

一旦获得了表的InnerHtml,我计划查找一个innertext值为“Field#2”的
。但是,我需要选择下一个
的内部文本。在本例中,我需要值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>
foreach(doc.DocumentNode.SelectNodes(//表[contains(@class,'data')])中的变量x)
{
//psuedo代码-搜索td并在内部文本/html上使用“contains”。
//然后,抓取下一个td内部html。
Console.WriteLine(x.InnerHtml);
}
字段#1:
1.
字段#2:
110
字段#3:
85
字段#4:
-259.34
字段#5:
1.
字段#6:
110
字段#7:
12
字段#8:
123.23

不确定agility pack是否支持它,但在XPath中,您可以使用
/following sibling
查询下一个同级:

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

本质上-找到所有具有给定文本的
td
节点,并给我它的下一个同级
td
节点。

这段代码将返回所需的td行

//<td  width="176">110</td>
var td = x.SelectNodes("//td").SkipWhile(g => !g.InnerText.Contains("Field #2:")).Select(s => s).Skip(1).FirstOrDefault(); 
/110
var td=x.SelectNodes(“//td”).SkipWhile(g=>!g.InnerText.Contains(“字段#2:)).Select(s=>s.Skip(1).FirstOrDefault();

几乎正确,在“/strong/”之前必须有一个“.”,在“following sibling”之后必须有两个“:”。那么它就可以正常工作了。