gpt4 book ai didi

c# - 使用 HTML Agility Pack 关联相邻元素值

转载 作者:太空宇宙 更新时间:2023-11-03 14:14:44 27 4
gpt4 key购买 nike

我试图获取带有文本“Results”的 HTML 注释后面的 h2 元素,然后是带有类名称“stockfeed”的表元素。

我已经想出如何提取我需要的数据(见下文),但我不确定如何同时将这 2 个元素提取到一起。我知道我可以使用相同的索引器迭代集合以关联值,但这似乎容易出错,因为我的 h2 元素之一可能没有相邻的表元素(很少见但可能)。

示例 HTML 标记:

<h1>
Results Page</h1>
<h2>
Updated Daily @ 10:00 AM</h2>
<div class='someClass1'>
<!-- Results -->
<div class='something'>
</div>
<h2 style='display: inline;'>
<a href='http://www.somesite.com'>Table 1</a>
</h2>
<div class='clr'>
</div>
<div class='resultBlock'>
<table class='stockfeed'>
<thead>
<tr>
<th>
Part
</th>
<th>
Description
</th>
<th>
Stock
</th>
<th>
Price
</th>
</tr>
</thead>
<tbody>
<tr class='row1' valign='top'>
<td>
A 1234567890
</td>
<td class='description'>
Part Description
</td>
<td>
1,000,000
</td>
<td>
$1.99
</td>
</tr>
<tr class='row1' valign='top'>
<td>
B 1234567890
</td>
<td class='description'>
Part Description
</td>
<td>
1,000,000
</td>
<td>
$1.99
</td>
</tr>
<tr class='row1' valign='top'>
<td>
C 1234567890
</td>
<td class='description'>
Part Description
</td>
<td>
1,000,000
</td>
<td>
$1.99
</td>
</tr>
</tbody>
</table>
</div>
<!-- Results -->
<div class='something'>
</div>
<h2 style='display: inline;'>
<a href='http://www.somesite.com'>Table 2</a>
</h2>
<div class='clr'>
</div>
<div class='resultBlock'>
<table class='stockfeed'>
<thead>
<tr>
<th>
Part
</th>
<th>
Description
</th>
<th>
Stock
</th>
<th>
Price
</th>
</tr>
</thead>
<tbody>
<tr class='row1' valign='top'>
<td>
A 1234567890
</td>
<td class='description'>
Part Description
</td>
<td>
1,000,000
</td>
<td>
$1.99
</td>
</tr>
<tr class='row1' valign='top'>
<td>
B 1234567890
</td>
<td class='description'>
Part Description
</td>
<td>
1,000,000
</td>
<td>
$1.99
</td>
</tr>
<tr class='row1' valign='top'>
<td>
C 1234567890
</td>
<td class='description'>
Part Description
</td>
<td>
1,000,000
</td>
<td>
$1.99
</td>
</tr>
</tbody>
</table>
</div>
</div>

当前分别解析值的代码:

    HtmlNodeCollection titles = doc.DocumentNode.SelectNodes("//comment()[contains(.,'Results')]/following-sibling::h2");
for (int tit = 0; tit < titles.Count; ++tit)
{
// Do Something
}

HtmlNodeCollection tables = doc.DocumentNode.SelectNodes("//table[@class='stockfeed']");
for (int tab = 0; tab < tables.Count; ++tab)
{
// Do Something
}

最佳答案

因此,如果我没看错的话,您是在尝试获取每个结果对应的表格。

您可以使用用于获取以下 h2 元素的类似方法来获取与其相关的以下 table 元素。

var query = doc.DocumentNode
.SelectNodes("//comment()[contains(.,'Results')]/following-sibling::h2");

foreach (var h2 in query.Cast<HtmlNode>())
{
var table = h2.SelectSingleNode("following-sibling::*/table[@class='stockfeed']");
// do stuff with h2 and table
}

关于c# - 使用 HTML Agility Pack 关联相邻元素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6836280/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com