作為編程新手,我閱讀了大量的示例代碼並嘗試將各種東西混合在一起以試圖了解哪些有用。我正在使用html agility pack試圖廢棄新聞網頁。
問題:我正在測試的其中一個節點不使用靜態值,它使用查看時間。如何將其應用於switch {case}方法。如果我在整個方法中偏離基礎,我也願意接受任何建議。
另請注意:我不需要捕獲此節點,如果有一種方法可以跳過它對我有用。
我決定使用一個使用開關的exapmle,
var rows = doc.DocumentNode.SelectNodes(".//*[@id='weekdays']/tr");
foreach (var row in rows)
{
var cells = row.SelectNodes("./td");
string title = cells[0].InnerText;
var valueRow = cells[2];
switch (title)
{
case "Date":
HtmlNode date = valueRow.SelectSingleNode("//*[starts-with(@id, 'detail_row_seek')]/td");
Console.WriteLine("UPC=A:\t" + date.InnerText);
break;
case "":
string Time = valueRow.InnerText;
Console.WriteLine("Time:\t" + Time);
break;
case "News":
string Time = valueRow.InnerText;
Console.WriteLine("News:\t" + News);
break;
}
摘錄的HTML
<table id="weekdays" cellpadding="6" cellspacing="0" border="0" width="100%">
<tr>
<td class="thead" style="border-bottom: 1px solid #d1d1e1;font-weight:normal; text-align: center; width:8%; padding-left: 6px;">Date</td>
<td class="thead" style="border-bottom: 1px solid #d1d1e1;font-weight:normal; width:8%; text-align: center; white-space:nowrap"><a href="guestcp.php?do=customoptions" title="Time & Date Options"><img style="position:relative; vertical-align: bottom;" src="images/misc/clock_small.gif" title="Time & Date Options" alt="Time & Date Options" border="0" /></a><a href="guestcp.php?do=customoptions" title="Time & Date Options"><span id="ff_nowtime_clock">3:20pm</span></a></td>
<td class="thead" style="border-bottom: 1px solid #d1d1e1;font-weight:normal; text-align: center; width:8%;">News</td>
.........
<tr id="detail_row_seek_37876">
<td id="toprow_9" class="alt1 espace" rowspan="3" style="vertical-align: top; text-align: center;" nowrap="nowrap">
<span class="smallfont">
<div>Sat</div>
Apr 9
</span>
</td>
<td class="alt1 espace" style="text-align: center;" nowrap="nowrap">
<span class="smallfont">Day 3</span>
</td>
<td class="alt1 espace" style="text-align: center;"><span class="smallfont">EUR</span></td>
<td class="alt1 espace" style="padding-top: 2px" align="center">
<a name="chart=37876" style="position:absolute; margin-top: -10px;"></a><a name="details=37876" style="position:absolute; margin-top: -10px;"></a>
<div class="cal_imp_medium" title="Medium Impact Expected"></div></td>
<td class="alt1 espace">
<div class="smallfont" id="title_37876" style="padding-left: 11px;">ECOFIN Meetings</div>
</td>
問題是:所謂的時間列不是靜態的,它實際使用時間值。有沒有辦法在案件中使用外卡或者做一個“包含”來解決這個非常冗長的問題?
您必須在switch語句的每種情況下使用常量值。
我能想到你做你想做的事情的唯一方法是使用default:
case - 在這個默認情況下,你可以使用if
,使用contains
, Parse
或Regex
測試來測試你正在尋找的值。
我無法完全遵循您的HTML示例代碼(抱歉!) - 但修改後的C#可能看起來像:
switch (title)
{
case "Date":
HtmlNode date = valueRow.SelectSingleNode("//*[starts-with(@id, 'detail_row_seek')]/td");
Console.WriteLine("UPC=A:\t" + date.InnerText);
break;
case "News":
string News = valueRow.InnerText;
Console.WriteLine("News:\t" + News);
break;
default:
if (regexTime.Match(title))
{
string Time = valueRow.InnerText;
Console.WriteLine("Time:\t" + Time);
}
break;
}
你可以使用“case default:”並在裡面放一個可以檢查的條件。
switch (title) {
case "Date":
HtmlNode date = valueRow.SelectSingleNode("//*[starts-with(@id, 'detail_row_seek')]/td");
Console.WriteLine("UPC=A:\t" + date.InnerText);
break;
case "News":
string Time = valueRow.InnerText;
Console.WriteLine("News:\t" + News);
break;
case default:
if (whatever you need) {
...
}
break;
}