Выберите узел с размером его конкретного дочернего узла в Linq, HtmlAgilityPack - PullRequest
0 голосов
/ 06 октября 2018

Я пытаюсь получить следующие данные.

<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".
Я думаю, что достаточно, если я смогу получить наборы "tr" с 11 тегами td.
, поэтому я пишу следующий источник.

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.

и это не работает.
Я мог бы получить список тегов tr с помощью DoucmentNode.SelectNodes ("// tr") ... и я добавил .Where (i => i.ChildNodes.Count> 10) , чтобы получить то, что я хочу.
, но у tr есть несколько «текстовых» дочерних узлов, и я получаю нежелательный узел.Следующая картинка показывает, что я получил с .Where (i => i.ChildNodes.Count> 10).

enter image description here

Я хочу получить узел tr, имеющий тег td в качестве дочерних узлов и имеющий ровно 11 тегов td.
как я могу это получитьtr узлы с синтаксисом Linq ..?

1 Ответ

0 голосов
/ 06 октября 2018

Если вы хотите tr узел с точными 11 td дочерними элементами, вы можете использовать ниже XPath:

//tr[count(td) = 11]
...