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;
        }

我不知道如何继续或添加条件

HTML 敏捷包获取 TR 下一个 TR 的 TD 内部文本

你在寻找这样的东西吗?

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>具有类"相关新闻"的标签和没有类的标签。如果要对其他类进行不同的分组,则必须修改代码。