【发布时间】:2018-10-22 15:38:07
【问题描述】:
我正在尝试解析 main(在 dom 树中的最后一个)
<table>
在本网站:“https://aips.um.si/PredmetiBP5/Main.asp?Mode=prg&Zavod=77&Jezik=&Nac=1&Nivo=P&Prg=1571&Let=1” 我在 Visual Studio 17 的 wpf 应用程序上使用 Htmlagilitypack 并用 C# 编写代码。
我现在正在使用这个代码:
iso = Encoding.GetEncoding("windows-1250");
web = new HtmlWeb()
{
AutoDetectEncoding = false,
OverrideEncoding = iso,
};
//http = https://aips.um.si/PredmetiBP5/Main.asp?Mode=prg&Zavod=77&Jezik=&Nac=1&Nivo=P&Prg=1571&Let=1
string http = formatLetnikLink(l.Attributes["onclick"].Value).ToString();
var htmlProgDoc = web.Load(http);
string s = htmlProgDoc.ParsedText;
htmlprogDoc.ParsedText 正确包含所有行 应该在最后一个表中 (我有这个用于调试,以防监视窗口被打破或什么...... idk......)
我试图首先获取网站上的所有表格。并意识到有6个
<table></table>
标签上,即使你视觉上只看到一个。经过几个小时的调试,我意识到最后一个主表是最后一个
<table>
在dom树中,解析器完全解析所有的
<tr>
表具有的标签。这就是问题所在,我需要所有的 tr 标签。
var tables = htmlProgDoc.DocumentNode.SelectNodes("//table");
有6次
<table></table>
标签,正如预期的那样,他们每个人都被完全解析,包括他们所有的行和列,除了最后一个,在最后一个它只解析前两行,然后解析器会追加一个
</table>
就其本身而言,我也尝试使用从 firefox 复制的直接 xpath 选择器: “/html/body/div/center[2]/font/font/font/table”,而不是“//table” 找到了正确的表,但该表也只包含前 2 行
var theTableINeed = tables.Last();
//contains the correct table which I need, but with only the first two rows
【问题讨论】:
-
您问题中的链接只指向一张桌子,而不是六张桌子,而且我们不会说斯洛文尼亚语。请编辑您的问题。不清楚你在问什么。你是说那张桌子吗? aips.um.si/PredmetiBP5/…
-
在网站上有一个表(视觉上)但是如果你查看 dom 树,有 6 个带有
标签的元素,我指的是最后一个
树,这是与其他网站的链接的主表。这是我需要解析的。很抱歉造成误解,如果仍然不清楚,请告诉我。
因为这个 Html 格式错误,HtmlAgilityPack 会猜测缺少哪些标签,然后将新标签插入到文档中。不幸的是,这并不总是奏效。例如<!-- stoplec interna izbirnost --><td class="tdStandard"><font class="Small">Izbirni</font></font></td>这里有一个额外的关闭字体标签。 Html 是废话。那么有没有办法让我获得完整的完整表格?我是 htmlagilitypack 的新手,有没有办法关闭标签插入?任何提示将不胜感激
标签: c# html html-table html-parsing html-agility-pack