使用 SyndicationFeed 从 xml 检索自定义元素值
Retrieving custom element values from xml using SyndicationFeed
我正在尝试找出一种从这个 xml 提要中检索 iTunes 元素的方法,但我这辈子都想不出来。
<item>
<title>Episode 41 - Brobdingnagian Lunches To Die For</title>
<pubDate>Fri, 17 Jul 2015 13:00:00 GMT</pubDate>
<dcterms:modified>2015-07-17</dcterms:modified>
<dcterms:created>2015-07-17</dcterms:created>
<link>http://starttocontinue.podomatic.com</link>
<dc:creator>Start To Continue</dc:creator>
<itunes:duration>0</itunes:duration>
<itunes:explicit>yes</itunes:explicit>
<itunes:order>1</itunes:order>
...
</item>
我正在为每个循环使用一个标准来设置简单的元素,如标题等。
foreach (SyndicationItem item in feed.Items)
{
string subject = item.Title.Text;
...
}
但不知道如何访问 iTunes 的,有没有人知道这是否可行或如何操作?
试试这个
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication37
{
class Program
{
static void Main(string[] args)
{
string input =
"<item xmlns:dcterms=\"www.myspace.com\" xmlns:dc=\"www.myspace.com\" xmlns:itunes=\"www.myspace.com\">" +
"<title>Episode 41 - Brobdingnagian Lunches To Die For</title>" +
"<pubDate>Fri, 17 Jul 2015 13:00:00 GMT</pubDate>" +
"<dcterms:modified>2015-07-17</dcterms:modified>" +
"<dcterms:created>2015-07-17</dcterms:created>" +
"<link>http://starttocontinue.podomatic.com</link>" +
"<dc:creator>Start To Continue</dc:creator>" +
"<itunes:duration>0</itunes:duration>" +
"<itunes:explicit>yes</itunes:explicit>" +
"<itunes:order>1</itunes:order>" +
"</item>";
XDocument doc = XDocument.Parse(input);
var results = doc.Descendants("item").Select(x => new
{
title = x.Element("title").Value,
pubDate = x.Element("pubDate").Value,
modified = x.Elements().Where(y => y.Name.LocalName == "modified").FirstOrDefault().Value,
created = x.Elements().Where(y => y.Name.LocalName == "created").FirstOrDefault().Value,
link = x.Element("link").Value,
creator = x.Elements().Where(y => y.Name.LocalName == "creator").FirstOrDefault().Value,
duration = x.Elements().Where(y => y.Name.LocalName == "duration").FirstOrDefault().Value,
explicit1 = x.Elements().Where(y => y.Name.LocalName == "explicit").FirstOrDefault().Value,
order = x.Elements().Where(y => y.Name.LocalName == "order").FirstOrDefault().Value,
}).ToList();
}
}
}
这最终成功了。
XElement ele = extension.GetObject<XElement>();
if (ele.ToString().StartsWith("<itunes:image"))
{
int index = ele.ToString().IndexOf("\" xmlns:itunes");
if (index > 0)
image = ele.ToString().Substring(0, index).Replace("<itunes:image href=\"", "");
}
我正在为 <itunes:episode>
标签寻找类似的东西。我知道这是一个相当古老的问题,但我想我会为可能会在这里结束的其他人添加我的方法。我得到它的工作:
var episode = item.Element("{http://www.itunes.com/dtds/podcast-1.0.dtd}episode").Value;
所以对于我要使用的示例之一:
var duration= item.Element("{http://www.itunes.com/dtds/podcast-1.0.dtd}duration").Value;
您可以使用 ElementExtensions
属性 获取其他元素:
const string ns = "http://www.itunes.com/dtds/podcast-1.0.dtd";
var duration = item.ElementExtensions.ReadElementExtensions<XElement>("duration", ns)
.Select(e => e.Value).First();
我正在尝试找出一种从这个 xml 提要中检索 iTunes 元素的方法,但我这辈子都想不出来。
<item>
<title>Episode 41 - Brobdingnagian Lunches To Die For</title>
<pubDate>Fri, 17 Jul 2015 13:00:00 GMT</pubDate>
<dcterms:modified>2015-07-17</dcterms:modified>
<dcterms:created>2015-07-17</dcterms:created>
<link>http://starttocontinue.podomatic.com</link>
<dc:creator>Start To Continue</dc:creator>
<itunes:duration>0</itunes:duration>
<itunes:explicit>yes</itunes:explicit>
<itunes:order>1</itunes:order>
...
</item>
我正在为每个循环使用一个标准来设置简单的元素,如标题等。
foreach (SyndicationItem item in feed.Items)
{
string subject = item.Title.Text;
...
}
但不知道如何访问 iTunes 的,有没有人知道这是否可行或如何操作?
试试这个
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication37
{
class Program
{
static void Main(string[] args)
{
string input =
"<item xmlns:dcterms=\"www.myspace.com\" xmlns:dc=\"www.myspace.com\" xmlns:itunes=\"www.myspace.com\">" +
"<title>Episode 41 - Brobdingnagian Lunches To Die For</title>" +
"<pubDate>Fri, 17 Jul 2015 13:00:00 GMT</pubDate>" +
"<dcterms:modified>2015-07-17</dcterms:modified>" +
"<dcterms:created>2015-07-17</dcterms:created>" +
"<link>http://starttocontinue.podomatic.com</link>" +
"<dc:creator>Start To Continue</dc:creator>" +
"<itunes:duration>0</itunes:duration>" +
"<itunes:explicit>yes</itunes:explicit>" +
"<itunes:order>1</itunes:order>" +
"</item>";
XDocument doc = XDocument.Parse(input);
var results = doc.Descendants("item").Select(x => new
{
title = x.Element("title").Value,
pubDate = x.Element("pubDate").Value,
modified = x.Elements().Where(y => y.Name.LocalName == "modified").FirstOrDefault().Value,
created = x.Elements().Where(y => y.Name.LocalName == "created").FirstOrDefault().Value,
link = x.Element("link").Value,
creator = x.Elements().Where(y => y.Name.LocalName == "creator").FirstOrDefault().Value,
duration = x.Elements().Where(y => y.Name.LocalName == "duration").FirstOrDefault().Value,
explicit1 = x.Elements().Where(y => y.Name.LocalName == "explicit").FirstOrDefault().Value,
order = x.Elements().Where(y => y.Name.LocalName == "order").FirstOrDefault().Value,
}).ToList();
}
}
}
这最终成功了。
XElement ele = extension.GetObject<XElement>();
if (ele.ToString().StartsWith("<itunes:image"))
{
int index = ele.ToString().IndexOf("\" xmlns:itunes");
if (index > 0)
image = ele.ToString().Substring(0, index).Replace("<itunes:image href=\"", "");
}
我正在为 <itunes:episode>
标签寻找类似的东西。我知道这是一个相当古老的问题,但我想我会为可能会在这里结束的其他人添加我的方法。我得到它的工作:
var episode = item.Element("{http://www.itunes.com/dtds/podcast-1.0.dtd}episode").Value;
所以对于我要使用的示例之一:
var duration= item.Element("{http://www.itunes.com/dtds/podcast-1.0.dtd}duration").Value;
您可以使用 ElementExtensions
属性 获取其他元素:
const string ns = "http://www.itunes.com/dtds/podcast-1.0.dtd";
var duration = item.ElementExtensions.ReadElementExtensions<XElement>("duration", ns)
.Select(e => e.Value).First();