我有问题。我应该阅读一个html,其中包含一个类名为“article_img”的图像,我应该可以将其作为其父级的兄弟。我的代码可以工作,但它将我的test.html中的两个图像放在与'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>
答案 0 :(得分:1)
我想我找到了答案:
doc.css('html').each do |element|
element.css('img.article_img').each do |node|
node.parent.before(node)
end
end
和更短的版本
ResourceMethodInvoker methodInvoker = (ResourceMethodInvoker) requestContext.getProperty(“org.jboss.resteasy.core.ResourceMethodInvoker”);
Method method = methodInvoker.getMethod();
答案 1 :(得分:1)
我是这样做的:
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>
doc.at('img.article_img')
找到第一个<img class="article_img"...>
。
我们在HTML中留下了一个空白,因为有一个尾随的Text节点包含在“漂亮的HTML”中看到的格式。修复这是留给读者的练习。