html敏捷包得到t的下一个tr的innertext

时间:2014-11-24 17:21:54

标签: c# xpath html-agility-pack

我在使用html敏捷包方面遇到了一些麻烦 我在一个或多个表中随机生成了具有相同class =“related-news”的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 agility pack?

我使用此代码获取每个td的innertext:

HtmlNodeCollection nodes2 = doc.DocumentNode.SelectNodes("//tr[@class='related-news']/td");
        foreach (HtmlNode node in nodes2)
        {
            string Text = node.InnerText;
        }

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

2 个答案:

答案 0 :(得分:0)

你在找这样的东西吗?

List<string> Text = new List<string>();

foreach (HtmlNode node in nodes2)
{
    Text.Add(node.InnerText);

}

答案 1 :(得分:0)

这只是一个非常常见的操作的表现:通过顺序列表和组合事物。

基本的想法是获取{em>所有的<tr>个节点,而不仅仅是&#34;相关新闻&#34;节点。然后,您浏览列表并将它们分组。下面的伪代码显示了它是如何完成的。

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());

请注意,代码只关心具有类&#34;相关新闻&#34;的<tr>标签。那些不要的人。如果您想要对其他课程进行不同的分组,则必须修改代码。