【问题标题】:Select Node with size of Its specific child Node In Linq, HtmlAgilityPack在Linq,HtmlAgilityPack中选择具有其特定子节点大小的节点
【发布时间】:2018-10-06 12:30:58
【问题描述】:

我正在尝试获取以下数据。

<html>
<body>
<tr class="udline">
    <th rowspan="2" class="noln">시간</th>
    <th rowspan="2">개인</th>
    <th rowspan="2">외국인</th>
    <th rowspan="2">기관계</th>
    <th colspan="6" class="eb">기관</th>
    <th rowspan="2">기타법인</th>
</tr>
<tr class="udline">
    <th class="sub">금융투자</th>
    <th class="sub">보험</th>
    <th class="sub">투신<br>(사모)</th>
    <th class="sub">은행</th>
    <th class="sub">기타금융기관</th>
    <th class="sub">연기금등</th>
</tr>
<tr>
    <td colspan="11" class="blank_07"></td>
</tr>
<!-- following are data -->
<tr>
    <td class="date2">18:01</td>
    <td class="rate_up3">2,024</td>
    <td class="rate_down3">-3,307</td>
    <td class="rate_up3">1,116</td>
    <td class="rate_up3">824</td>
    <td class="rate_down3">-16</td>
    <td class="rate_up3">764</td>
    <td class="rate_down3">-43</td>
    <td class="rate_down3">-5</td>
    <td class="rate_down3">-408</td>
    <td class="rate_up3">166</td>
</tr>
<tr>
    <td class="date2">18:00</td>
    <td class="rate_up3">2,022</td>
    <td class="rate_down3">-3,305</td>
    <td class="rate_up3">1,116</td>
    <td class="rate_up3">824</td>
    <td class="rate_down3">-16</td>
    <td class="rate_up3">764</td>
    <td class="rate_down3">-43</td>
    <td class="rate_down3">-5</td>
    <td class="rate_down3">-408</td>
    <td class="rate_up3">166</td>
</tr>
...
</body></html>  

我想获取包含数据的“tr”标签的节点列表。但我在获取“tr”标签时遇到问题。
我认为如果我能得到一组具有 11 个 td 标签的“tr”就足够了。
所以我写了以下来源。

result = await httpClient.GetStringAsync(new Uri(timeUrlAddress));
htmlDoc.LoadHtml(result);
var nodes = 
    htmlDoc.DocumentNode.SelectNodes("//tr")
    .Where(i => i.ChildNodes.Any(j => j.Name.Equals("td")).Count>10); // <--- I have Problem.

foreach(var i in nodes) {  ... } // <-- iterating list of <tr> tags.

它不起作用。
我可以使用 DoucmentNode.SelectNodes("//tr") 获得 tr 标签列表 ...并附加 .Where(i=>i.ChildNodes.Count >10 )强>得到我想要的。
但是 tr 有几个“文本”子节点,我得到了不需要的节点。下图显示我得到了 .Where(i=>i.ChildNodes.Count>10)。

我想获取具有 td 标签作为子节点并且恰好有 11 个 td 标签的 tr 节点。
如何使用 Linq 语法获取该 tr 节点..?

【问题讨论】:

    标签: c# linq xpath html-agility-pack


    【解决方案1】:

    如果您希望 tr 节点正好有 11 个 td 子节点,您可以在 XPath 下方使用:

    //tr[count(td) = 11]
    

    【讨论】:

    • 谢谢,我用那个 Xpath 语法解决了。 var nodes = htmlDoc.DocumentNode.SelectNodes("//tr[count(td)=11]");.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多