Windows Phone 8.0 Silverlight App & HTMLAgilityPack 处理缺失元素

Windows Phone 8.0 Silverlight App & HTMLAgilityPack dealing with missing elements

在 Windows Phone 8.0 Silverlight 应用程序中使用 HttpClient 和 HtmlAgility 包。

我想知道如何管理 node/image 不包含在 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>

我需要来自第三个 div (cta-signedIn) 的 img src。但是,对于某些日期,最后两个 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>

理想情况下,当这两个 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;
}

此外,由于某种原因,这段代码执行得非常慢。有什么特别的原因吗?

如果您只是想检查图像是否存在并相应地做一些逻辑,那么您可以检查是否 SelectSingleNode() 给定的图像选择器 returns 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
}

顺便说一句,我在上面的代码片段中建议了一个 可能 更有意义的选择器。元素位置索引通常意义不大。