C# 如何选择下一个<;td>;元素?
我正在尝试使用HTML敏捷包解析一些HTML。下面的代码片段选择了包含我需要的信息的table元素,但我需要深入挖掘该表 一旦获得了表的InnerHtml,我计划查找一个innertext值为“Field#2”的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 -
。但是,我需要选择下一个
的内部文本。在本例中,我需要值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”之后必须有两个“:”。那么它就可以正常工作了。