我正试图从互联网上的时间表中读取。
这是html代码的一部分:
<TR>
<TD rowspan=12 align="center" nowrap="1">
<TABLE>
<TR>
<TD align="center" nowrap=1><font size="3" face="Arial"><B>Monday</B></font>
</TD>
</TR>
</TABLE>
</TD>
<TD colspan=2 rowspan=12 align="center" nowrap="1">
<TABLE>
<TR>
<TD>
</TD>
</TR>
</TABLE>
</TD>
<TD colspan=6 rowspan=12 align="center" nowrap="1">
<TABLE>
<TR>
<TD width="33%" nowrap=1><font size="2" face="Arial"><B>Meeting</B></font></TD>
</TR>
<TR>
<TD width="33%" nowrap=1><font size="2" face="Arial"><B>London</B></font></TD>
<TD width="33%" nowrap=1><font size="2" face="Arial">Smith</font></TD>
</TR>
</TABLE>
</TD>
<TD colspan=4 rowspan=12 align="center" nowrap="1">
我设法安装HTMLAgilityPack并立即实现此代码。到目前为止,后代和跳过似乎还不错:
List<List<string>> table = doc.DocumentNode.SelectSingleNode("//table[@border='3']")
.Descendants("tr")
.Skip(1)
.Where(tr => tr.Elements("td").Count() >= 4)
.Select(tr => tr.Elements("td").Select(td => td.InnerText.Trim()).ToList())
.ToList();
表的结果是这样的:
colspan值表示持续时间。所以我的问题是:
如何将colspan的值作为结果的一部分?我需要知道,伦敦会议在2个单位后开始,持续6个单位。
谢谢!
答案 0 :(得分:3)
以匿名方式捕获它可能是最简单的:
var table = doc.DocumentNode.SelectSingleNode("//table[@border='3']")
.Descendants("tr")
.Skip(1)
.Where(tr => tr.Elements("td").Count() >= 4)
.Select(tr => tr.Elements("td")
.Select(td => new { Text = td.InnerText.Trim(), Duration = td.Attributes["Colspan"] != null ? td.Attributes["Colspan"].Value: "1").ToList())
.ToList();
或者创建一个元组的实例:
List<List<Tuple<string, string>> table = doc.DocumentNode.SelectSingleNode("//table[@border='3']")
.Descendants("tr")
.Skip(1)
.Where(tr => tr.Elements("td").Count() >= 4)
.Select(tr => tr.Elements("td")
.Select(td => new Tuple<string,string>(td.InnerText.Trim(), td.Attributes["Colspan"] != null ? td.Attributes["Colspan"].Value: "1").ToList())
.ToList();