HTML 敏捷包获取 TR 下一个 TR 的 TD 内部文本
本文关键字:TR 下一个 TD 文本 内部 获取 包获取 HTML | 更新日期: 2023-09-27 18:31:41
我在使用 html 敏捷包时遇到了一些问题我随机生成了 tr,在一个或多个表中重复了相同的 class="related-news",但它们不一定相互跟随,大多数时候它们之间没有类的 tr。我正在尝试做的是获取那些没有类的 trs 的 td 的内部文本,并将它们与它们正上方的 tr class="related-news" 一起放在一个数组中
这是 html
<tr class="related-news">
<td>some text</td>
<td>some text</td>
<td>some text</td>
</tr>
<tr class="">
<td>some text</td>
<td>some text</td>
<td>some text</td>
</tr>
<tr class="">
<td>some text</td>
<td>some text</td>
<td>some text</td>
</tr>
<tr class="">
<td>some text</td>
<td>some text</td>
<td>some text</td>
</tr>
<tr class="related-news">
<td>some text</td>
<td>some text</td>
<td>some text</td>
</tr>
<tr class="">
<td>some text</td>
<td>some text</td>
<td>some text</td>
</tr>
<tr class="related-news">
<td>some text</td>
<td>some text</td>
<td>some text</td>
</tr>
没有办法知道有多少没有类的 tr 会在带有类"相关新闻"的 trs 之间被隔离,我需要获取所有 tds 的内部文本,我对此没有任何疑问,问题是每次我到达带有类"相关新闻"的 tr 时将它们分开
像这样:
如果这个TR有类"相关新闻"获取此 TR 的 TS 的内部文本和下一个 TRS 的内部文本,而他们没有类"相关新闻"如果达到具有"相关新闻"类的 TR,则创建一个新的 arrey并继续
这在HTML敏捷包中甚至可能吗?
我用这个代码得到每个td的内部文本:
HtmlNodeCollection nodes2 = doc.DocumentNode.SelectNodes("//tr[@class='related-news']/td");
foreach (HtmlNode node in nodes2)
{
string Text = node.InnerText;
}
我不知道如何继续或添加条件
你在寻找这样的东西吗?
List<string> Text = new List<string>();
foreach (HtmlNode node in nodes2)
{
Text.Add(node.InnerText);
}
这只是一个非常常见的操作的表现:通过顺序列表并组合事物。
基本思想是获取所有<tr>
节点,而不仅仅是"相关新闻"节点。然后,您浏览列表并对其进行分组。下面的伪代码显示了它是如何完成的。
List<string> TextLines = new List<string>();
StringBuilder sb = new StringBuilder();
foreach (var node in nodes)
{
if node class == "related-news"
{
// we've found a new "related-news" node.
// add the previous stuff to the list
if (sb.Length > 0)
TextLines.Add(sb.ToString());
sb = new StringBuilder(node.InnerText);
}
else
{
sb.Append(node.InnerText);
}
}
// and don't forget the last one
if (sb.Length > 0)
TextLines.Add(sb.ToString());
请注意,代码只关心<tr>
具有类"相关新闻"的标签和没有类的标签。如果要对其他类进行不同的分组,则必须修改代码。