Html NoMethodError:未定义的方法'parent';对于#<;Nokogiri::XML::NodeSet:0x007fbefee5e420>;

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

我有个问题。我应该阅读一个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.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”中看到的格式