html agility pack获取t的下一个tr的innertext

c# html-agility-pack xpath

我在使用html敏捷包时遇到了一些问题我在一个或多个表中随机生成了相同类=“相关新闻”的trs但是它们不一定是彼此跟随的,并且大部分时间都有trs与他们之间没有课。我想要做的是获取没有类的那些trs的td的innerText并将它们放在一个数组中,同时将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>

没有办法知道在课程“相关新闻”之间会有多少没有课程的课程需要获得所有tds的内部文本我没有任何问题,因为问题是每次都将它们分开我通过班级“相关新闻”到达tr

像这样的东西:

如果这个tr有类“相关新闻”得到这个tr的ts的innertext和下一个tne的innertext而他们没有类“相关新闻”如果达到“相关新闻”类的tr创建一个新的arrey和继续

这是否可能与HTML敏捷包?

我用这段代码得到每个td的innertext:

HtmlNodeCollection nodes2 = doc.DocumentNode.SelectNodes("//tr[@class='related-news']/td");
        foreach (HtmlNode node in nodes2)
        {
            string Text = 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());

请注意,代码只关心具有“related-news”类的<tr>标签和不具有“related-news”类的标签。如果您要对其他类进行不同的分组,则必须修改代码。



Related

许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow