2011-04-09 20 views
2

作爲編程的新手,我閱讀了大量的示例代碼,並試圖一起破解一些東西,試圖瞭解什麼可行。我正在使用試圖取消新聞網頁的html敏捷包。開關{case}中是否可以使用通配符或字符串「contains」?謹慎:羅嗦

問題:我正在測試的一個節點不使用靜態值,它使用查看時間。我怎樣才能將它應用於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 &amp; Date Options"><img style="position:relative; vertical-align: bottom;" src="images/misc/clock_small.gif" title="Time &amp; Date Options" alt="Time &amp; Date Options" border="0" /></a><a href="guestcp.php?do=customoptions" title="Time &amp; 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> 

的問題是:所謂的時間列不是靜態的,它實際使用時間值。有沒有辦法在案件中使用通配符或以某種方式來執行「包含」以解決這個非常棘手的問題?

回答

5

您必須在switch語句的每種情況下使用常數值。

我能想到的,你做你希望做什麼的唯一方式是使用default:情況下 - 這種默認情況下,在你可以測試你正在尋找使用containsParseRegex測試使用值if

我不能完全按照你的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; 
      } 
1

該情況必須是一個常數表達式。見MSDN。如果你可以切換到使用if-else,你會有更多的自由。

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 "News": 
         string Time = valueRow.InnerText; 
         Console.WriteLine("News:\t" + News); 
         break; 

        case default: 
         if (whatever you need) { 
          ... 
         } 
         break; 
       } 
1

添加一個默認實現,並在那裏添加額外的條件檢查。或者你可能會更好,只是如果陳述。

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; 

      default: 
       // put special time condition check logic here. 
     } 
相關問題