在Windows Phone 8.0 Silverlight应用程序中使用HttpClient和HtmlAgility包。
我想知道如何管理节点/图片不包含在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;
}
此外,由于某种原因,此代码执行速度非常慢。有什么特别的原因吗?
答案 0 :(得分: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
}
顺便说一句,我在上面的代码段中建议了一个可能更有意义的选择器。元素位置指数通常意义不大。