2012-07-20 88 views
0

如何提取使用图像标记中的样式属性给出的背景图像 在上面的标记中,我想提取图像。style属性而不是从SRC我想提取的图像而不是图片的路径从img style =“background:url('path')中提取图像但不是从src

+0

“我想提取的图像但不是图像的路径“,你是指图像,图像本身是什么? – 2012-07-20 09:19:20

+0

你想要自己的形象吗? – 2012-07-20 10:01:05

+0

即使我提供从后台网址提取的完整路径,图像也不会显示。 – Maddy 2012-07-20 10:17:18

回答

0

试试这个

var imageUrl = document.getElementById('myImage').style.background.image.url; 
+0

谢谢您的回复。一旦所有图像被提取到imageUrl变量中,我都没有得到如何使用imageUrl。在上面的答案中,Duane说我们可以在htmlagilitypack中使用HtmlNode,但是我在将图像放置在带有文本的输出文件中时遇到了问题。 – Maddy 2012-07-20 10:01:26

+1

我相信他需要C#代码,而不是Javascript – 2012-07-20 10:02:22

0

您可以使用HTML Agility pack和:

var images = doc.DocumentNode.Descendants("img").Where(d => d.Attributes.Contains("style") && d.Attributes["style"].Value.Contains("background:url")).ToList(); 

这将返回一个包含所有图像的类型HtmlAgilityPack<HtmlNode>的列表,然后您可以枚举它们以获取值。

+0

谢谢你的回复。如何在HtmlNode中显示图像。我如何在输出字符串中包含这些图像。我从网页中提取图像和文本。 – Maddy 2012-07-20 09:26:59

+0

我想你可以使用'string.Substring'并得到'background:url'第一次出现的索引,然后读取所有文本,直到结尾''' – dtsg 2012-07-20 10:04:38

+0

你能告诉我一个示例代码如何用这个。 以下是我迄今为止用于提取内容的代码。 HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument(); document.LoadHtml(html); var images = document.DocumentNode.Descendants(“img”)。其中(d => d.Attributes.Contains(“style”)&& d.Attributes [ “风格”] Value.Contains( “背景:URL”))ToList(); string target =“”; HtmlNodeCollection col = document。DocumentNode.SelectNodes( “//表[@id = \” resultsTable \ “]”); foreach(HtmlNode link in col) { target + = link.InnerHtml; } – Maddy 2012-07-20 10:19:07

0

如果你正在做任何复杂的HTML解析HTML Agility Pack是一个很好的解决方案。

但是,如果这是你想要做的一切,一个简单的正则表达式就可以做到这一点。

如果您使用css标记,图像或背景图像设置图像,则可以搜索url并提取完整路径。

这非常简单的正则表达式将做到这一点。

url\(.*?\) 

从完整路径中提取图像路径应该是微不足道的。

-1

,你也可以使用简单的正则表达式这个问题xpathing使用HTML敏捷性包

style=background:url\('(?<bgpath>.*)'\) 

在这里用自己的方式后是一个示例代码

static void Main(string[] args) 
{ 
    string innerHTML = "<img style=\"background:url('images/logo.jpg')\" />"; 

    string regex = @"style=""background:url\('(?<bgpath>.*)'\)\"""; 
    RegexOptions options = ((RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline) | RegexOptions.IgnoreCase); 
    Regex reg = new Regex(regex, options); 
    if (reg.IsMatch(innerHTML)) 
    { 
     Console.WriteLine(reg.Match(innerHTML).Groups["bgpath"].Value); 
    } 

    Console.ReadLine(); 
}