C# 如何检索<;img>;进入xml节点?

C# 如何检索<;img>;进入xml节点?,c#,xml,C#,Xml,我使用的rss提要包含以下项目: <item> <title>Loi Hamon sur l&#39;e-commerce : ce qu&#39;il faut faire pour &#234;tre pr&#234;t le 13 juin</title> <link>http://www.journaldunet.com/ebusiness/commerce/loi-hamon-sur-l-e

我使用的rss提要包含以下项目:

<item>
    <title>Loi Hamon sur l&#39;e-commerce : ce qu&#39;il faut faire pour &#234;tre pr&#234;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;
}