C# 如何检索<;img>;进入xml节点?
我使用的rss提要包含以下项目:C# 如何检索<;img>;进入xml节点?,c#,xml,C#,Xml,我使用的rss提要包含以下项目: <item> <title>Loi Hamon sur l'e-commerce : ce qu'il faut faire pour être prêt le 13 juin</title> <link>http://www.journaldunet.com/ebusiness/commerce/loi-hamon-sur-l-e
<item>
<title>Loi Hamon sur l'e-commerce : ce qu'il faut faire pour être prêt le 13 juin</title>
<link>http://www.journaldunet.com/ebusiness/commerce/loi-hamon-sur-l-e-commerce.shtml</link>
<description><![CDATA[<a href="http://www.journaldunet.com/ebusiness/commerce/loi-hamon-sur-l-e-commerce.shtml">
<img src="http://i-cms.journaldunet.com/image_cms/100/2084358-loi-hamon-sur-l-e-commerce-ce-qu-il-faut-faire-pour-etre-pret-le-13-juin.jpg" align="left" hspace="5" vspace="0"></a>
Procédures, documents contractuels... Très concrètement, que doivent modifier les e-marchands avant que le volet VAD de la loi consommation n'entre en vigueur ? Réponse.]]>
</description>
<pubDate>Fri, 04 Apr 2014 20:14:09 +0200</pubDate>
<guid>http://www.journaldunet.com/ebusiness/commerce/loi-hamon-sur-l-e-commerce.shtml</guid>
</item>
这是示例的rss提要:您可以使用xPath
XmlDocument doc = New XmlDocument();
doc.Load(XmlAddressHere);
var node = doc.SelectSingleNode("\item\description\@img");
可能是一种方法
var reader = XmlReader.Create("http://www.journaldunet.com/web-tech/rss/");
SyndicationFeed feed = SyndicationFeed.Load(reader);
foreach (SyndicationItem item in feed.Items)
{
string description = item.Summary.Text;
var images = GetImgUrlsFromString(description);
}
}
List<string> GetImgUrlsFromString(string html)
{
List<string> imageList = new List<string>();
var images = html.Split(new string[] { "<img" }, StringSplitOptions.None);
foreach (string image in images)
{
var srcIndex = image.IndexOf(" src=\"");
if (srcIndex > -1)
{
srcIndex += 6;
var srcEndIndex = image.IndexOf("\"", srcIndex) + 1;
string imgSrcUrl = image.Substring(srcIndex, srcEndIndex - srcIndex);
imageList.Add(imgSrcUrl);
}
}
return imageList;
}
var reader=XmlReader.Create(“http://www.journaldunet.com/web-tech/rss/");
SyndicationFeed=SyndicationFeed.Load(读卡器);
foreach(feed.Items中的SyndicationItem项目)
{
字符串说明=item.Summary.Text;
var images=GetImgUrlsFromString(说明);
}
}
列表GetImgUrlsFromString(字符串html)
{
List imageList=新列表();
var images=html.Split(新字符串[]{“-1)
{
srcIndex+=6;
var srcEndIndex=image.IndexOf(“\”,srcendex)+1;
字符串imgSrcUrl=image.Substring(srcendex,srcEndIndex-srcendex);
imageList.Add(imgSrcUrl);
}
}
返回图像列表;
}
一种可能的方法是使用RegEx获取图像url的值,如@MarvinSmit在评论中所建议的。但如果你想避免使用正则表达式,还有另一种方法
元素中的字符串是html格式的,因此您可以选择一个使您能够轻松处理html的库,例如使用CodePlex中的(HAP):
foreach (SyndicationItem element in elements)
{
SyndicationLink lien = element.Links.FirstOrDefault();
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(element.Summary.Text);
var url = doc.DocumentNode.SelectSingleNode("//img").GetAttributeValue("src", "");
Elements e = new Elements
{
Titre = element.Title.Text,
Url = lien == null ? null : lien.Uri,
ImageSource = url;
};
yield return e;
}
HAP对格式错误的html数据也有很好的容忍度。当我测试时,它可以成功地将这个问题中的CDATA字符串解析为
HtmlDocument
。谢谢你的回答,但我的代码不适用。我想通过联合来实现这一点。你能提供一个提要url吗?因为img标记位于CDATA节中,所以它被认为是纯文本,并且不单独出现在文档结构中。你必须用标签“字符数据扫描”文本。(我会考虑正则表达式。)
foreach (SyndicationItem element in elements)
{
SyndicationLink lien = element.Links.FirstOrDefault();
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(element.Summary.Text);
var url = doc.DocumentNode.SelectSingleNode("//img").GetAttributeValue("src", "");
Elements e = new Elements
{
Titre = element.Title.Text,
Url = lien == null ? null : lien.Uri,
ImageSource = url;
};
yield return e;
}