2017-03-02 19 views
2

まず、私はたくさんの方法を試しましたが、問題を解決できませんでした。私はSelectSingleNode(?)メソッドに自分のノードを配置する方法を知らない。私は私のC#コードで私のノードに到達するhtmlパスを作成しますが、私はこのコードを実行すると、私は自分のhtmlパスのためにNullReferenceExceptionを取る。私はちょうどあなたが私のHTMLの方法や他のソリューションを作成することができますか?
これは、HTMLコードの例です:私はHtmlAgilityPackでウェブサイトからデータを取得しようとしています

<html> 
    <body> 
     <div id="container"> 
      <div id="box"> 
       <div class="box"> 
        <div class="boxContent"> 
         <div class="userBox"> 
          <div class="userBoxContent"> 
           <div class="userBoxElement"> 
            <ul id ="namePart"> 
             <li> 
              <span class ="namePartContent> 

              </span> 
             </li> 
            </ul> 
           </div> 
          </div> 
         </div> 
        </div> 
       </div> 
      </div> 
     </div> 
    </body> 
</html> 

そして、この私のC#コード:

namespace AgilityTrial 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Uri url = new Uri("https://...."); 
      WebClient client = new WebClient(); 
      client.Encoding = Encoding.UTF8; 
      string html = client.DownloadString(url); 
      HtmlDocument doc = new HtmlDocument(); 
      doc.LoadHtml(html); 

      string path = @"//html/body/div[@id='container']/div[@id='classifiedDetail']"+ 
       "/div[@class='classifiedDetail']/div[@class='classifiedDetailContent']"+ 
       "/div[@class='classifiedOtherBoxes']/div[@class='classifiedUserBox']"+ 
       "/div[@class='classifiedUserContent']/ul[@id='phoneInfoPart']/li"+ 
       "/span[@class='pretty-phone-part show-part']"; 
      var tds = doc.DocumentNode.SelectSingleNode(path); 
      var date = tds.InnerHtml; 

       Console.WriteLine(date); 
     } 
    } 
} 

答えて

1

例としてあなたnamePartContentスパンノードを取ります。あなたがそのデータを取得したい場合は、単にこれを行うだろう:

doc.DocumentNode.SelectSingleNode(".//span[@class='namePartContent']")?.InnerText;

それはあなたのケース <html>には、ルートノードで初め、そのクラスとして namePartContentで単一スパンノードをフェッチ/検索します

+0

ありがとう、@ Zroq – ZpCikTi

関連する問題