2

私はC#とWindows Phoneの開発に慣れていないので、明らかなことを見逃している場合はご容赦ください。

http://blog.dota2.com/feed/にあるRSSXMLフィードのサムネイル画像を表示したいと思います。画像は、HTMLで記述されたCDATAタグ内にあります。XMLコードは次のとおりです。

    <content:encoded>
<![CDATA[
<p>We celebrate Happy Bear Pun Week a day earlier as Lone Druid joins Dota 2&#8242;s cast of heroes.</p> <p><a href="http://media.steampowered.com/apps/dota2/posts/LoneDruid_full.jpg "><img class="alignnone" title="The irony is that he's allergic to fur." src="http://media.steampowered.com/apps/dota2/posts/LoneDruid_small.jpg" alt="The irony is that he's allergic to fur." width="551" height="223" /></a></p> <p>Community things:</p> <ul> <li><a href="http://www.itsgosu.com/game/dota2/articles/ig-monthly-madness-invitational-finals-mar-29_407" target="_blank">It&#8217;s Gosu&#8217;s Monthly Madness</a> tournament finals are tomorrow, March 29th. You don&#8217;t want to miss this, we hear it could be more than we can bear.</li> <li>Bear witness to <a href="http://www.team-dignitas.net/articles/blogs/DotA/1092/Dota-2-Ultimate-Guide-to-Warding/" target="_blank">Team Dignitas&#8217; Ultimate Guide to Warding</a>. This should be required teaching in clawsrooms across the globe.</li> <li>Great Explorer Nullf has <a href="http://nullf.deviantart.com/#/d4ubxiu" target="_blank">compiled the eating habits</a> of the legendary Tidehunter in one handy chart. This might give you paws before deciding to head to the beach.</li> </ul> <p>Bear in mind that there will not be an update next week as we will be hibernating during that time.</p> <p>Today&#8217;s bearlog is available <a href="http://store.steampowered.com/news/7662" target="_blank">here</a>.</p> <p>&nbsp;</p> <p>Bear.</p>
]]>
</content:encoded>

<img src="http://media.steampowered.com/apps/dota2/posts/LoneDruid_small.jpg" /> URLを使用してリーダーアプリに画像を表示できるようにする必要があり ます。

HTMLを解析するのは悪い習慣なので、正規表現を使用しないように言われるのを聞いたことがあります。私はこれを概念実証として作成しており、これについて心配する必要はありません。画像のこのURLを取得し、アプリでこれを呼び出す最も簡単な方法を探しています。

誰か助けがありますか?よろしくお願いします、トム

4

3 に答える 3

1

HtmlAgilityPackを使用する準備ができたら、これを試すことができます

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(yourstring);
var imgLinks = doc.DocumentNode
    .Descendants("img")
    .Select(n => n.Attributes["src"].Value)
    .ToArray();
于 2012-04-10T14:18:05.910 に答える
1

xmlが次のようになっていると仮定します(これはそうではないと確信しています)。これらの拡張機能:http ://searisen.com/xmllib/extensions.wiki

<?xml version="1.0" encoding="utf-8"?>
<root xmlns:content='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'>
  <content:encoded>
    <![CDATA[
<p>We celebrate ...</p> 
<p>
  <a href="http://media.steampowered.com/apps/dota2/posts/LoneDruid_full.jpg ">
    <img class="alignnone" title="The irony is that he's allergic to fur." 
        src="http://media.steampowered.com/apps/dota2/posts/LoneDruid_small.jpg" />
  </a>
</p> 
<p>the rest removed</p> 
]]>
  </content:encoded>
</root>

これにより、2番目の段落から画像ソースが取得されます-ハードコーディングされて醜いですが、必要なのはそれだけです。それが機能するためには、へのパスを指定するpath/to/content:encoded必要があります。それがグループ(別名配列)にある場合は、さらに複雑になります。私のコードから、配列を分離する方法を見ることができます(パラグラフを参照):

XElement root = XElement.Load(file) // or .Parse(string)
string html = root.Get("content:encoded", string.Empty).Replace("&nbsp", " ");
XElement xdata = XElement.Parse(string.Format("<root>{0}</root>", html));
XElement[] paras = xdata.GetElements("p").ToArray();
string src = paras[1].Get("a/img/src", string.Empty);

PSこれは、HTMLが適切に形成されているために機能します。形成されていない場合は、他の人が回答したようにHtmlAgilityPackを使用する必要があります。あなたはhtmlから返されたを使用することができますGet("content:emcoded" ...)

于 2012-04-10T17:46:23.440 に答える
0
const string pattern = @"<img.+?src.*?\=.*?""(<?URL>.*?)""";
Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);
var match = regex.Match(myCDataText);
var domain = match.Groups["URL"].Value;
于 2012-04-10T14:20:26.607 に答える