2016-03-26 7 views
1

Windows Phone 8.0 SilverlightアプリケーションでHttpClientをHtmlAgilityパックで使用する。Windows Phone 8.0 Silverlight Appおよび欠落要素を扱うHTMLAgilityPack

ノード/イメージがHTMLのセクション内に含まれていない例外を管理する方法を知りたいと思います。

たとえば、これは情報を取得しているHTMLのスニペットです。

<PARENT> 
    <div class="game-c"> 
     <div class="boxshot"> 
      <img class="cover" src="http://cover_source" /> 
     </div> 
     <h3 class="h3 white-c">Game Title ...</h3> 
     <p>Game description goes here...</p> 
     <p>...</p> 
     <div class="cta-signedOut">...</div> 
     <div class="cta-signedIn"> 
      <a href="https://link.to.store"> 
      <img src="gameImage.gif" /></a> 
     </div> 
    </div> 
</PARENT> 

3番目のdiv(cta-signedIn)からimg srcが必要です。ただし、特定の日付の場合、最後の2つのdivはコメントアウトされています。だから、コードは次のようになります。

<PARENT> 
    <div class="game-c"> 
     <div class="boxshot"> 
      <img class="cover" src="http://cover_source" /> 
     </div> 
     <h3 class="h3 white-c">Game Title ...</h3> 
     <p>Game description goes here...</p> 
     <p>...</p> 
     **<!--<div class="cta-signedOut">...</div> 
     <div class="cta-signedIn"> 
      <a href="https://link.to.store"> 
      <img src="gameImage.gif" /></a> 
     </div-->** 
    </div> 
</PARENT> 

理想的には、これらの2つのdivのがコメントアウトされているとき、私は/Assets/Images/Unavailable.png

にローカルに位置しています私自身のイメージファイルを使用したいですそして、次のコードが情報を見つけるのに正しいことを確認できますか?

div.SelectSingleNode("//div[3]/a/img").Attributes["src"].Value; 

ありがとうございます。

27/03/2016 - 以下を追加しました:

私は、次のコードを使用していますが、それはローカルの画像をロードしません。

私は次のことをしようとしているが、それは動作しません...

var img = div.SelectSingleNode("div[@class='cta-signedIn']/a/img"); 
var img2 = ("/Assets/Images/storeLogo_unavailable.png"); 
if (img == null) 
{ 
    newGame.StoreLink = img2; 
} 
else 
{ 
    newGame.StoreLink = div.SelectSingleNode("div[@class='cta-signedIn']/a/img").Attributes["src"].Value; 
} 

また、何らかの理由で、このコードは非常にゆっくりと実行されます。それに対する特別な理由は何ですか?

+0

* "理想的には、これらの2つのdivがコメントアウトされている場合は、/Assets/Images/Unavailable.png"にローカルにある自分のイメージファイルを使用したいと考えています。何のためにあなた自身のイメージを使用しますか? – har07

+0

さて、私は単純にイメージの存在を確認し、それに応じていくつかのロジックをしたいと思うと思います... – har07

+0

私は私の元の投稿で曖昧だった場合は申し訳ありません。メインページ内には、上記のノードの内容にバインドされたイメージがあります。 HTMLに 'cta-signedOut'と 'cta-signedIn'の両方がある場合、画像は 'cta-signedIn'内のsrcの画像になります。しかし、2つの 'cta'クラスがない2番目の例では、画像をローカルに1つずつ取り込みたいと考えています。うまくいけば、それは私の質問をクリアする。これまでの助けてくれてありがとう。 –

答えて

0

イメージの存在を確認し、それに応じてロジックを行うことを意味するのであれば、SelectSingleNode()イメージのセレクタがnullを返すかどうかを確認できます。例えば、divあなたのHTMLスニペット外側divを参照すると仮定:

var img = div.SelectSingleNode("div[@class='cta-signedIn']/a/img"); 
if(img != null) 
{ 
    //TODO: do something with `img` 
} 
else 
{ 
    //TODO: use local image file 
} 

ところで、私は上記のスニペットでおそらくより有意義なセレクタを示唆しました。要素の位置インデックスは一般にあまり意味がありません。

+0

グレートコードの例では、正しいイメージをWebサイトから取得するように動作します。しかし、どのようにimgにローカルファイルをロードするのですか? –

+0

あなたが検索した場合、すでに多くのそうした質問があります(いずれも試していません)。これは一例です:[Windows Phone 8 C#PNGの読み込みと描画](http://stackoverflow.com/questions/15356838/windows-phone-8-c-sharp-load-and-draw-pngs) – har07