저는 C#과 Windows App 개발에 익숙하지 않았습니다. 내 경험은 대부분 파이썬이지만, 새로운 것을 배우기 위해 스스로 도전하고 있습니다. 나는 8.1에 대한 지시 사항을 수정을 포함하여 튜토리얼 (완료 http://msdn.microsoft.com/en-us/library/windows/apps/br211380.aspxC# Win8.1 App에서 XML ElementExtensions를 읽는 중
: 나는 윈도우 스토어 앱을 만들어 C#을 학습/연습, 일부 WinJS을하고 이후 봤는데
은/HTML5 튜토리얼 나는이 튜토리얼에서 시작 애플 리케이션을 배후에있다. 이제 다른 유형의 데이터를 처리하기 위해 응용 프로그램을 조정하려고합니다.
게시물의 각 항목에서 모든 이미지 : 이미지 태그를 가져 오려고합니다. 이것을 표시합니다. 이것은 RSS 피드의 XML 데이터 구조입니다.
<item>
<title>Post with photos</title>
<link>http://website.com/2014/07/23/post-1//</link>
<comments>http://website.com/2014/07/23/post-1/#comments</comments>
<pubDate>Wed, 23 Jul 2014 15:45:02 +0000</pubDate>
<dc:creator><![CDATA[Author]]></dc:creator>
<category><![CDATA[Post]]></category>
<guid isPermaLink="false">http://www.website.com/p?1</guid>
<description><![CDATA[description here]]></description>
<wfw:commentRss>http://www.website.com/post/1/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
<enclosure type="image/jpeg" length="1" url="http://0.gravatar.com/avatar/" />
<media:thumbnail url="http://www.website.com/thumbnail_urle1406130272443.jpg?w=500" />
<media:content url="http://0.gravatar.com/avatar/" medium="image">
<media:category>author</media:category>
</media:content>
<media:content url="http://www.website.com/post/1/233-e1406130272443.jpg" medium="image">
<media:title>image-23</media:title>
</media:content>
<media:content url="http://www.website.com/post/1/163.jpg" medium="image">
<media:title>image-16</media:title>
</media:content>
<media:content url="http://www.website.com/post/1/73.jpg" medium="image">
<media:title>bimage-7</media:title>
</media:content>
</item>
,
나는 HTML5/JS에서 이것을 구현 내가 한 때이 방법을 사용 :
var thumb = post.querySelector(
"thumbnail").attributes.getNamedItem("url").textContent;
var postImages = post.querySelectorAll("content");
var ImageList = [];
for (var imgIndex = 1; imgIndex < postImages.length; imgIndex++) {
var imgHTML = "<img src='" + postImages[imgIndex].attributes.getNamedItem("url").textContent + "'</img><br/>";
var ImageList = ImageList += imgHTML;
}
그러나 자연을 .. C#으로하지 않습니다. 그래서이 스레드를 보았습니다 : Get media elements from RSS using SyndicationFeed뿐만 아니라 그 안에 연결된 하나 그들은 나를 위해 작동하지 않습니다. var 요소 = rss.Feed.Items.SelectMany (s => s.ElementExtensions.Select (x => x.GetObject(). Value));를 사용하려고합니다.
코드를 사용하여 모두 넣으면 GetObject 메서드를 사용할 수 없습니다. 여기 내 현재 데이터 모델입니다.
private async Task<FeedData> GetFeedAsync(string feedUriString)
{
Windows.Web.Syndication.SyndicationClient client = new SyndicationClient();
Uri feedUri = new Uri(feedUriString);
try
{
SyndicationFeed feed = await client.RetrieveFeedAsync(feedUri);
// This code is executed after RetrieveFeedAsync returns the SyndicationFeed.
// Process the feed and copy the data you want into the FeedData and FeedItem classes.
FeedData feedData = new FeedData();
if (feed.Title != null && feed.Title.Text != null)
{
feedData.Title = feed.Title.Text;
}
if (feed.Subtitle != null && feed.Subtitle.Text != null)
{
feedData.Description = feed.Subtitle.Text;
}
if (feed.Items != null && feed.Items.Count > 0)
{
// Use the date of the latest post as the last updated date.
feedData.PubDate = feed.Items[0].PublishedDate.DateTime;
foreach (SyndicationItem item in feed.Items)
{
FeedItem feedItem = new FeedItem();
if (item.Title != null && item.Title.Text != null)
{
feedItem.Title = item.Title.Text;
}
if (item.PublishedDate != null)
{
feedItem.PubDate = item.PublishedDate.DateTime;
}
if (item.Authors != null && item.Authors.Count > 0)
{
feedItem.Author = item.Authors[0].Name.ToString();
}
// Handles RSS/Atom Feed differences..
if (feed.SourceFormat == SyndicationFormat.Atom10)
{
if (item.Content != null && item.Content.Text != null)
{
feedItem.Content = item.Content.Text;
}
if (item.Id != null)
{
feedItem.Link = new Uri(item.Id);
}
}
else if (feed.SourceFormat == SyndicationFormat.Rss20)
{
if (item.Summary != null && item.Summary.Text != null)
{
feedItem.Content = item.Summary.Text;
}
if (item.Links != null && item.Links.Count > 0)
{
feedItem.Link = item.Links[0].Uri;
}
}
feedData.Items.Add(feedItem);
}
}
return feedData;
}
catch (Exception)
{
return null;
}
}
내가 중단 점을 설정하고 내 RSS2.0 신디케이션 처리기에서 항목 데이터를 찾고 시도했습니다, 나는 VAR 미디어 =의 item.ElementExtensions을 볼 수 있습니다; 내 게시물의 모든 요소 확장자와 제목을 정확하게 표시합니다. (NodeName "content", NodeValue는 요소의 "title"이지만 url 태그의 URI는 없습니다.)
이 미디어를 가져 오는 방법을 통합하는 방법을 찾고 있는데, 콘텐츠, 미디어 축소판, 등, 목록에 그래서 내가 그들을 조립하고 내 애플 리케이션에서 HTML 콘텐츠에 대한 그들을 사용할 수 있습니다.
조언을 보내 주시면 감사하겠습니다.
편집 :
내 코드의 더 ..
public class FeedData
{
public string Title { get; set; }
public string Description { get; set; }
public DateTime PubDate { get; set; }
public Uri Image { get; set; }
private List<FeedItem> _Items = new List<FeedItem>();
public List<FeedItem> Items
{
get
{
return this._Items;
}
}
}
// Holds info for a single blog post
public class FeedItem
{
public string Title { get; set; }
public string Author { get; set; }
public string Content { get; set; }
public DateTime PubDate { get; set; }
public Uri Link { get; set; }
}
// Holds a collection of blog feeds (FeedData), and contains methods needed to retrieve
// the feeds
public class FeedDataSource
{
private ObservableCollection<FeedData> _Feeds = new ObservableCollection<FeedData>();
public ObservableCollection<FeedData> Feeds
{
get
{
return this._Feeds;
}
}
public async Task GetFeedsAsync()
{
Task<FeedData> feed1 =
GetFeedAsync("http://url.com/feed");
Task<FeedData> feed2 =
GetFeedAsync("http://url.com/feed");
...
...
this.Feeds.Add(await feed1);
...
...
...
this.Feeds.Add(await feed15);
}
나는 내 자신의 문제를 해결했습니다. XMLDocument를로드 할 필요가 있음을 알았다면 태그를 사용하여 요소를 선택하고 속성을 가져올 수있었습니다. 꽤 직설적 인! 답변은 다음과 같습니다. – MorePyPlease