我在使用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;
}
我不知道如何继续或添加条件
答案 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>
标签。那些不要的人。如果您想要对其他课程进行不同的分组,则必须修改代码。