我想img在回圈遍歷檔案時從標簽中洗掉所有資料屬性。我已經嘗試了一些使用has_attribute?and 的選項xpath,但都沒有回傳true。
article.css('img').each do |img|
# There is a `data` element
img.has_attribute?("data-lazy-srcset") # true
# But I only get `false` or empty arrays when trying wildcards
img.has_attribute?('data-*') # false
img.has_attribute?("//*[@*[contains(., 'data-')]]") # false
img.has_attribute?("//*[contains(., 'data-')]") # false
img.has_attribute?("//@*[starts-with(name(), 'data-')]") # false
img.xpath("//*[@*[contains(., 'data-')]]") # []
img.xpath("//*[contains(., 'data-')]") # []
end
如何選擇data-這些img標簽上的所有屬性?
uj5u.com熱心網友回復:
您可以使用以下命令搜索具有以“data-”開頭的屬性的 img 標簽:
//img[@*[starts-with(name(),'data-')]]
分解一下:
- // - 檔案中的任何位置
- img - img 標簽
- @* - 所有屬性
- starts-with(name(),'data-') - 屬性的名稱以“data-”開頭
例子:
require 'nokogiri'
doc = Nokogiri::HTML(<<-END_OF_HTML)
<img src='' />
<img data-method='a' src= ''>
<img data-info='b' src= ''>
<img data-type='c' src= ''>
<img src= ''>
END_OF_HTML
imgs = doc.xpath("//img[@*[starts-with(name(),'data-')]]")
puts imgs
# <img data-method="a" src="">
# <img data-info="b" src="">
# <img data-type="c" src="">
或使用您想要的回圈
doc.css('img').select do |img|
img.xpath(".//@*[starts-with(name(),'data-')]").any?
end
#[#<Nokogiri::XML::Element:0x384 name="img" attributes=[#<Nokogiri::XML::Attr:0x35c name="data-method" value="a">, #<Nokogiri::XML::Attr:0x370 name="src">]>,
# #<Nokogiri::XML::Element:0x3c0 name="img" attributes=[#<Nokogiri::XML::Attr:0x398 name="data-info" value="b">, #<Nokogiri::XML::Attr:0x3ac name="src">]>,
# #<Nokogiri::XML::Element:0x3fc name="img" attributes=[#<Nokogiri::XML::Attr:0x3d4 name="data-type" value="c">, #<Nokogiri::XML::Attr:0x3e8 name="src">]>]
更新要洗掉屬性:
doc.css('img').each do |img|
img.xpath(".//@*[starts-with(name(),'data-')]").each(&:remove)
end
puts doc.to_s
#<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" #\"http://www.w3.org/TR/REC-html40/loose.dtd\">
#<html>
#<body>
# <img src=\"\">
# <img src=\"\">
# <img src=\"\">
# <img src=\"\">
# <img src=\"\">
#</body>
#</html>
這可以簡化為 doc.xpath("//img/@*[starts-with(name(),'data-')]").each(&:remove)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/400262.html
上一篇:平衡括號條件問題
下一篇:Xcode:GLFW/GLAD默認C應用程式中的“執行緒1:EXC_BAD_ACCESS(代碼=1,地址=0x0)”
