gpt4 book ai didi

ruby - 如何删除具有给定 src 属性的图像节点?

转载 作者:太空宇宙 更新时间:2023-11-03 18:30:51 26 4
gpt4 key购买 nike

我需要删除带有给定 src 的图像

img_src = "http://domain/img.jpg"
@doc.xpath("//img[@src='#{img_src}']")[0].remove

不起作用。也这样试过

@doc.xpath("//img[@src='#{img_src}']") {|x| x.remove}

也不行。对我做错了什么有什么想法吗?

我明白了。这是一个愚蠢的错误。您所有的解决方案都是正确的。

最佳答案

Nokogiri有两种不同的解析器模式,一种用于 XML,一种用于 HTML。 XML 很严格,而 HTML 很宽松,因为 HTML 并不总是表现良好。

doc = Nokogiri::XML('<xml><a>1</a></xml>')

doc = Nokogiri::HTML('<html><body>foo</body></html>')

我一般是这样的parse an HTML file :

require 'nokogiri'
require 'open-uri'

doc = Nokogiri::HTML(open('http://www.example.com'))
print doc.to_html
# >> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
[...]

要剥离标签,您需要先找到它,然后删除。在我们解析 HTML 或 XML 文档后,我们将分别有一个 Nokogiri::HTML 或 Nokogiri::XML 文档,并且,在这一点上,我们所谓的“标签”现在称为“节点”。 Nokogiri 可以找到节点集,即与搜索匹配的节点,或单个节点,这将是搜索中的第一个匹配项。

这将使用 CSS 访问器搜索匹配 src="a.png" 的第一个节点,这通常比 XPath 更容易/更清晰。 Nokogiri 对 XPath 和 CSS 都非常了解,网站上提到的 CSS 有一些优点:

require 'nokogiri'
require 'open-uri'

html = '<html><body><img src="a.png" /><img src="b.png" /></body></html>'

doc = Nokogiri::HTML(html)
doc.at('img[@src="a.png"]').remove
print doc.to_html
# >> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
# >> <html><body><img src="b.png"></body></html>

要找到与访问器匹配的所有节点,您可以将 doc.at('img[@src="a.png"]').remove 替换为:

doc.search('img[@src="a.png"]').each { |n| n.remove }

tutorials也值得一读。

关于ruby - 如何删除具有给定 src 属性的图像节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4357218/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com