为什么我的代码在 Htmldocument 中选择所有 text() 节点

本文关键字:text 节点 选择 代码 我的 Htmldocument 为什么 | 更新日期: 2023-09-27 18:22:48

    HtmlNode node = doc.DocumentNode.SelectNodes("//tr")[0];
            foreach(HtmlTextNode n in node.SelectNodes("//text()"))
               Console.WriteLine(n.Text);

.HTML:

<table class="infobox" style="width: 17em; font-size: 100%;float: left;">
<tr>
<th style="text-align: center; background: #f08080;" colspan="3">خدیجہ مستور</th>
</tr>
<tr style="text-align: center;">
<td colspan="3"><a href="/wiki/%D8%AA%D8%B5%D9%88%DB%8C%D8%B1:Khatijamastoor.JPG" class="image" title="خدیجہ مستور"><img alt="خدیجہ مستور" src="//upload.wikimedia.org/wikipedia/ur/thumb/7/7b/Khatijamastoor.JPG/150px-Khatijamastoor.JPG" width="150" height="203" srcset="//upload.wikimedia.org/wikipedia/ur/thumb/7/7b/Khatijamastoor.JPG/225px-Khatijamastoor.JPG 1.5x, //upload.wikimedia.org/wikipedia/ur/thumb/7/7b/Khatijamastoor.JPG/300px-Khatijamastoor.JPG 2x"></a><br>
<div style="font-size: 90%">خدیجہ مستور</div>
</td>
</tr>
<tr>
<th style="background: #f08080;" colspan="3">ادیب</th>
</tr>
<tr>
<td><b>ولادت</b></td>
<td colspan="2"><a href="/wiki/1930%D8%A1" title="1930ء">1930ء</a>، <a href="/wiki/%D9%84%DA%A9%DA%BE%D9%86%D8%A4" title="لکھنؤ">لکھنؤ</a>، <a href="/wiki/%D8%A8%D8%B1%D8%B7%D8%A7%D9%86%D9%88%DB%8C_%DB%81%D9%86%D8%AF%D9%88%D8%B3%D8%AA%D8%A7%D9%86" title="برطانوی ہندوستان" class="mw-redirect">برطانوی ہندوستان</a></td>
</tr>
<tr>
<td><b><a href="/wiki/%D8%A7%D8%B5%D9%86%D8%A7%D9%81_%D8%A7%D8%AF%D8%A8" title="اصناف ادب">اصناف ادب</a></b></td>
<td colspan="2"><a href="/wiki/%D9%86%D8%A7%D9%88%D9%84" title="ناول" class="mw-redirect">ناول</a></td>
</tr>
<tr>
<td><b>معروف تصانیف</b></td>
<td colspan="2"><a href="/wiki/%D8%A2%D9%86%DA%AF%D9%86" title="آنگن">آنگن</a></td>
</tr>
</table>

输出应为:

خدیجہ مستور

但我发现:

خدیجہ مستور

خدیجہ مستور

ادیب

ولادت

1930年،لکھنؤ،برطانوی ہندوستان

اصناف ادب

ناول

معروف تصانیف

آنگن

为什么node.selectNodes("//text(("(选择文档中的所有text((节点,而不是从第一个tr标签中选择text((节点?

为什么我的代码在 Htmldocument 中选择所有 text() 节点

因为您要在 XPath 的开头添加两个正斜杠 ( //tr (,这将选择文档中的所有元素,而不仅仅是所选节点的后代。

试试这个:

foreach (HtmlTextNode n in node.SelectNodes("text()"))

或者只是将 XPath 简化为:

var node = doc.DocumentNode.SelectSingleNode("//tr[1]/text()");
Console.WriteLine(node.Text);