2013-02-24 40 views
0

我正在研究情感分類,並且我正在解析本地電影數據庫中的數據。問題是他們有三種分類形式。一個與星(實現了......)一個「垃圾」,並沒有給明星或者叫它垃圾在這裏是主要的鏈接到它:http://www.csfd.cz/film/7049-playgirls/?all=1你需要檢查源代碼 - 這裏有一個例子,你可以看到所有這三種用戶電影評價。C#中的HTML解析 - 分類

</li> 
<li id="comment-8356897"> 
    <h5 class="author"><a href="/uzivatel/138463-campbell/">Campbell</a></h5> 
    <img src="http://img.csfd.cz/assets/images/rating/stars/2.gif" class="rating" width="16" alt="**" /> 
    <div class="info"> 
     <a href="/uzivatel/138463-campbell/komentare/">všechny komentáře uživatele</a></div> 
    <p class="post">Ale jo:-D Když jsem viděl že tenhle film je na prvním místě mezi největšíma sračkama na CSFD, a tak jsem se zhrozil a abych si utrpení ještě vylepšil, tak jsem si pustil oba dva díly naráz. No hell to celkem bylo ale ne nic extrémní. Viděl jsem větší shity. V tomhle filmu jsem měl děsnej problém fandit někomu fandit protože to moc nejde. Šílenost, Ale ne nejhorší.<span class="date desc">(11.3.2011)</span></p> 
</li> 
<li id="comment-872277"> 
    <h5 class="author"><a href="/uzivatel/48974-fleker/">fleker</a></h5> 

    <div class="info"> 
     <a href="/uzivatel/48974-fleker/komentare/">všechny komentáře uživatele</a></div> 
    <p class="post">tak na todle rači ani koukat nebudu; hodnocení to má slušný ale nechci riskovat aby mi vyschla mícha<span class="date desc">(29.7.2009)</span></p> 
</li> 
<li id="comment-327360"> 
    <h5 class="author"><a href="/uzivatel/41698-ozo/">Ozo</a></h5> 
    <strong class="rating">odpad!</strong> 
    <div class="info"> 
     <a href="/uzivatel/41698-ozo/komentare/">všechny komentáře uživatele</a></div> 
    <p class="post">Změna názoru - tohle si jednu hvězdičku nezaslouží =(<span class="date desc">(29.7.2007)</span></p> 
</li> 

非常感謝 我的計劃是做這樣的:「odpad」

string srxPathOfCategory = "//ul[@class='ui-posts-list']//li//img[@class='rating'] | //ul[@class='ui-posts-list']//li//strong[@class='rating']"; 
     foreach (var att in doc.DocumentNode.SelectNodes(srxPathOfCategory)) // | .//strong[@class='rating']")){ 
     { 

      if (att.InnerText == "odpad!") //odpad means rubbish 
      { 
       b[j] = att.InnerText; //saving "odpad!" for later use 

      } 
      if (att.Attributes["alt"] != null) 

      { 
       b[j] = att.Attributes["alt"].Value; //these values are from 1* to 5***** 

      } 
      if (att.InnerText != "odpad!" && att.Attributes["alt"] == null)//this is where the problems starts 
      { 
        b[j] = "without user evaluation"; 

      } 

      j++; 
     } 

與此代碼問題是,如果它未能找到att.InnerText ==或att.Attributes [「alt」]!= null它繼續到下一篇文章,並從那裏進行用戶評估。但我希望至少與評價被忽略的職位相匹配。

+0

,如果你與你的替換'if'語句'如果-else'和你最後還有可能是默認的評價 – Buksy 2013-02-24 10:28:07

回答

1

感謝所有幫助,但問題是在xpath的html。

我解決它像這樣

string srxPathOfCategory = "//ul[@class='ui-posts-list']//li"; 

     foreach (var att in doc.DocumentNode.SelectNodes(srxPathOfCategory)) 
     { 

      foreach (var child in att.ChildNodes.Skip(3)) // skipping first three nodes //- first one is whitespace - marked as #text child node, then there is h5 and third is //another whitespace marked as #text child node 
      { 

       if (child.InnerText == "odpad!") 
       { 
        b[j] = child.InnerText; 
        Console.WriteLine(b[j]); 
        Console.ReadKey(); 
        break; 

       } 
       else if (child.Attributes["alt"] != null) 
       { 
        b[j] = child.Attributes["alt"].Value; 
        Console.WriteLine(b[j]); 
        Console.ReadKey(); 
        break; 
       } 
       else 
       { 
        b[j] = "without user evaluation"; 
        Console.WriteLine("hlupost"); 
        Console.ReadKey(); 
        break; 
       } 

      } 
      j++; 
     } 
0

「odpad!」不在屬性中,它在元素中。

+0

我不知道,但是這不會幫助我。該程序能夠解析「odpad」,並從1 *到5 *****。問題是,當它發現後沒有像「odpad」或5評價*****它跳到下一個職位採取評估從那裏,因此混合職位和評估 – user2103492 2013-02-24 09:25:17

0

如果您更改了if聲明會怎麼樣。爲什麼你甚至有3條if語句如果只有一個能是真的嗎?

// Is it "odpad" ? 
if (att.InnerText == "odpad!") 
{ 
    b[j] = att.InnerText; 

} 
// .. If not, is it starred? 
else if (att.Attributes["alt"] != null) 
{ 
    b[j] = att.Attributes["alt"].Value; 

} 
// If none of above, it must be this (default) 
else 
{ 
     b[j] = "without user evaluation"; 

} 
+0

本的正確順序會照顧odpad和明星,但什麼都不做無評價,因此它看起來像屬性[「ALT」]一直不爲空 – user2103492 2013-02-24 11:18:25