2016-01-24 31 views
2

在Windows Phone 8.0 Silverlight應用程序中將HttpClient與HtmlAgility組件搭配使用。C#如何處理Windows Phone 8.0中的圖像異常Silverlight應用程序

我想知道如何管理圖像未包含在特定節點中的異常。

例如,對於缺少文本,我會用以下內容:

var noTitle = div.SelectSingleNode(".//h3"); 
if (noTitle == null || string.IsNullOrEmpty((noTitle.InnerText ?? "").Trim())) 
    newGame.Title = "Unavailable"; 
else 
    newGame.Title = div.SelectSingleNode(".//h3").InnerText.Trim(); 

但是,我怎麼了失蹤IMG SRC代碼呢?我的默認代碼,沒有異常處理是:

newGame.Cover = div.SelectSingleNode(".//img[@class= 'box1']").Attributes["src"].Value; 

理想情況下,我想用我自己的圖像文件如果沒有節點(如「/Assets/Images/Unavailable.png」)

內所含

在此先感謝。

31/01/2016 - 增加HTML代碼

這是我收到從信息的HTML片段。

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

我需要從 'CTA-SignedIn' 的IMG SRC。

+1

是什麼類型'Cover'?我假設你得到一個'NullReferenceException'如果img src不存在? – ChrisF

+0

關於屬性的Contains方法呢? – Filip

+0

@ChrisF public string Cover {get;組; }並且是 –

回答

1

HtmlAgilityPack有GetAttributeValue()這是適合您的要求的方法。當找不到屬性將返回該法規定默認值的第二個參數:

newGame.Cover = div.SelectSingleNode(".//img[@class= 'box1']") 
        .GetAttributeValue("src", "/Assets/Images/Unavailable.png"); 

上面的代碼假定<img>元素始終存在,只是它src屬性有時失蹤。否則,您需要先檢查SelectSingleNode()是否返回null

下面是簡單的工作演示的例子:

var html = @"<div><img/></div>"; 
HtmlDocument doc = new HtmlDocument(); 
doc.LoadHtml(html); 

var src = doc.DocumentNode 
      .SelectSingleNode("//img") 
      .GetAttributeValue("src", "/Assets/Images/Unavailable.png"); 
Console.WriteLine(src); 

dotnetfiddle demo

輸出:

/Assets/Images/Unavailable.png 
+0

感謝您的代碼示例,但它仍然無法正常工作。它需要沿着第二個示例的線條,因爲有時元素不存在。該項目編譯並運行,但不顯示src或我自己的資產。 –

相關問題