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