2016-03-26 2 views
1

Использование HttpClient с пакетом HtmlAgility в приложении Windows Phone 8.0 Silverlight.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> 

Мне нужен img src из третьего div (cta-signedIn). Однако, для определенных дат, последние два div's закомментированы. Таким образом, код выглядит следующим образом:

<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> 

В идеале, когда эти два 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

* «В идеале, когда эти два элемента div закомментированы, я хотел бы использовать свой собственный файл изображения, который локально находится в /Assets/Images/Unavailable.png"*. Используйте свой собственный образ для чего? – har07

+0

Хорошо, я полагаю, вы просто хотите проверить наличие изображения и сделать некоторую логику соответственно ... – har07

+0

Извините, если я был расплывчатым в своем оригинальном посте. На главной странице у меня есть изображение, связанное с содержимым узла выше. Когда в HTML есть как «cta-signedOut», так и «cta-signedIn», изображение будет иметь вид src внутри «cta-signedIn». Однако во втором примере, где отсутствуют два класса «cta», я хочу, чтобы изображение было заполнено одним локально. Надеюсь, это прояснит мои вопросы. Спасибо за помощь до сих пор. –

ответ

0

Если вы просто хотели проверить наличие изображения и выполнить некоторую логику, то вы можете проверить, предоставлен ли SelectSingleNode() селектор для возврата изображения null. Например, если предположить, что div ссылку на внешний div в вашем HTML сниппет:

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

BTW, я предложил возможно более содержательную селектор в приведенном выше фрагменте кода. Индекс положения элемента обычно менее значим.

+0

Отличный пример кода, он работает, чтобы получить правильное изображение с сайта. Однако, как загрузить локальный файл в img? –

+0

Если вы ищете, в SO уже много таких вопросов (не пробовал ни одного из них tho). Это один из примеров: [Windows Phone 8 C# Load and Draw PNG] (http://stackoverflow.com/questions/15356838/windows-phone-8-c-sharp-load-and-draw-pngs) – har07

Смежные вопросы