Html NoMethodError:未定义的方法'parent';对于#<;Nokogiri::XML::NodeSet:0x007fbefee5e420>;
我有个问题。我应该阅读一个html,其中包含一个类名为“article_img”的图像,我应该能够将其作为其父级的兄弟。我的代码可以工作,但它将两个图像放在与“div”相同的级别上,而不是将另一个“img”放在与“p”相同的级别上 这是我的密码:Html NoMethodError:未定义的方法'parent';对于#<;Nokogiri::XML::NodeSet:0x007fbefee5e420>;,html,css,ruby,nokogiri,Html,Css,Ruby,Nokogiri,我有个问题。我应该阅读一个html,其中包含一个类名为“article_img”的图像,我应该能够将其作为其父级的兄弟。我的代码可以工作,但它将两个图像放在与“div”相同的级别上,而不是将另一个“img”放在与“p”相同的级别上 这是我的密码: require 'nokogiri' doc = File.open('test.html') { |f| Nokogiri::HTML(f)} doc.css('html').each do |element| img = element
require 'nokogiri'
doc = File.open('test.html') { |f| Nokogiri::HTML(f)}
doc.css('html').each do |element|
img = element.css('img.article_img')
parent = img.first.parent
parent.before(img)
end
下面是我的html示例
<div>
<p>Lorem ipsum jne...<a href="#">link</a></p>
<img class="article_img" src="image.jpg">
<p>Lorem ipsum jne...<a href="#">link</a>
<img class="article_img" src="image.png">
</p>
</div>
益智
益智。。。
结果应该是这样的:
<img class="article_img" src="image.jpg">
<div>
<p>Lorem ipsum jne...<a href="#">link</a></p>
<img class="article_img" src="image.png">
<p>Lorem ipsum jne...<a href="#">link</a></p>
</div>
益智
Lorem ipsum jne…
我想我找到了答案:
doc.css('html').each do |element|
images = element.css('img.article_img')
images.each do |node|
parent = node.parent
parent.before(node)
end
end
和较短的版本
doc.css('html').each do |element|
element.css('img.article_img').each do |node|
node.parent.before(node)
end
end
我是这样做的:
require 'nokogiri'
doc = Nokogiri::HTML(<<EOT)
<html>
<body>
<div>
<p>Lorem ipsum jne...<a href="#">link</a></p>
<img class="article_img" src="image.jpg">
<p>Lorem ipsum jne...<a href="#">link</a>
<img class="article_img" src="image.png">
</p>
</div>
</body>
</html>
EOT
img = doc.at('img.article_img')
img.parent.add_previous_sibling(img)
puts 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 class="article_img" src="image.jpg"><div>
# >> <p>Lorem ipsum jne...<a href="#">link</a></p>
# >>
# >> <p>Lorem ipsum jne...<a href="#">link</a>
# >> <img class="article_img" src="image.png">
# >> </p>
# >> </div>
# >> </body>
# >> </html>
需要“nokogiri”
doc=Nokogiri::HTML(
# >>
# >>
# >>
#>Lorem ipsum jne
# >>
#>Lorem ipsum jne。。。
# >>
#>>
# >>
# >>
# >>
doc.at('img.article\u img')
查找第一个
我们在HTML中留下了一个空白,因为后面有一个文本节点,包含了在“漂亮的HTML”中看到的格式