2014-03-04 18 views
5

Wenn ich versuche, HTMLTableCell zu analysieren, ist der innerText Wert falsch und es scheint, dass ich den Klassennamen anstelle des Textes bekomme.mshtml.HTMLTableCell hat falschen inneren Textwert

Nun ist die seltsame Sache, dass, wenn ich die Zelle (in VS2010) in Debugging sehe ich den richtigen Wert, was mache ich falsch?

Weitere Untersuchungen brachten diese auf, wenn ich die Werte in VS2010 sehen sie wie diese cell.innerText sieht ist "center time" und ((mshtml.HTMLTableCellClass) (Zelle)). innertext ist "23:45". Das Problem ist, dass es nicht kompilieren, wenn ich geworfen und ich mshtml.HTMLTableCellClass so muss ich die Schnittstelle (warum?)

siehe Code unten:

mshtml.HTMLDocument doc = MainBrowser.Document as mshtml.HTMLDocument; 

if (doc != null) 
{ 

    mshtml.HTMLTable table = doc.getElementById("ecEventsTable") as mshtml.HTMLTable; 

    List<List<string>> textRows = new List<List<string>>(); 

    foreach (mshtml.HTMLTableRow row in table.rows) 
    { 
     if (row != null && row.id != null && row.id.Contains("eventRowId")) 
     { 
      List<string> temp = new List<string>(); 

      foreach (mshtml.HTMLTableCell cell in row.cells) 
      { 
       string text = cell.innerText; 
       if (text != null && text != "" && text != " ") 
       { 
        if (text.Contains("\r\n")) 
         text = text.Replace("\r\n", ""); 

        temp.Add(cell.innerText); 
       } 
      } 

      if (temp.Count > 0) 
       textRows.Add(temp); 
     } 
    } 

    foreach (var row in textRows) 
    { 
     string str = String.Join(" ", row); 
    } 
} 

}

HTML Beispiel Zeile:

<tr id="eventRowId_34599" onclick="javascript:changeEventDisplay(34599, this, 'overview');" event_timestamp="2014-02-24 01:30:00" event_attr_id="752"> <td class="center time">01:30</td> <td class="flagCur"><span title="China" class=" ceFlags China">&nbsp;</span>CNY</td> <td title="" class="sentiment"><i class="newSiteIconsSprite grayFullBullishIcon middle"></i><i class="newSiteIconsSprite grayEmptyBullishIcon middle"></i> <i class="newSiteIconsSprite grayEmptyBullishIcon middle"></i></td>
<td class="left event">China House Prices (YoY)</td> <td title="" class="bold act blackFont" id="eventActual_34599">9.6%</td> <td class="fore" id="eventForecast_34599">&nbsp;</td> <td class="prev blackFont" id="eventPrevious_34599">9.9%</td> <td class="diamond" id="eventRevisedFrom_34599">&nbsp;</td> </tr>

+0

So 'string text = cell.innerText;' ist nicht richtig? Können Sie Beispiel-HTML hinzufügen? –

+1

@AlexK. Kleine Beispielzelle: ' 01:30' in Zeile 'string text = Zelle.innerText;' text ist "center time" statt "01:30". –

+0

Haben Sie stattdessen cell.innerHtml ausprobiert? – Frankenscarf

Antwort

3

Statt mit mshtml.HTMLTableCell ich benutze mshtml.IHTMLElement und jetzt funktioniert es.

Code nach dem Update (alte Version in der Frage):

foreach (mshtml.IHTMLElement cell in row.cells) 
{ 
    string text = cell.innerText; 

    if (text != null && text != "" && text != " ") 
    { 
     if (text.Contains("\r\n")) 
      text = text.Replace("\r\n", ""); 

     temp.Add(text); 
    } 
}