如何使用 Nokogiri 获取倒数第二个脚本结束标记
How to get the second to last script closing tag using Nokogiri
我需要使用 Nokogiri 获取倒数第二个脚本结束标记。
示例代码:
<head>
<script src="first.js"></script>
<script src="second.js"></script>
<!-- How to place some scripts here? -->
<script>
// init load
</script>
</head>
我试过这样的代码 doc.css('/html/head/script')[-2]
。但是,它将代码放在标签内。
不完全清楚你想要什么,因为你没有给我们预期的结果,但这似乎是你说的:
require 'nokogiri'
doc = Nokogiri::HTML(<<EOT)
<html>
<head>
<script src="first.js"></script>
<script src="second.js"></script>
<!-- How to place some scripts here? -->
<script>
// init load
</script>
</head>
</html>
EOT
doc.css('script')[-2].add_next_sibling("\n<script src='new_script.js'></script>")
这导致:
doc.to_html
# => "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n" +
# "<html>\n" +
# " <head>\n" +
# "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n" +
# " <script src=\"first.js\"></script>\n" +
# " <script src=\"second.js\"></script>\n" +
# "<script src=\"new_script.js\"></script>\n" +
# " <!-- How to place some scripts here? -->\n" +
# " <script>\n" +
# " // init load\n" +
# " </script>\n" +
# " </head>\n" +
# "</html>\n"
Nokogiri 的 XML::Node documentation 充满了有用的方法。我建议阅读它很多次。
Nokogiri 不知道关闭标签。解析后它知道有一个对象并且该对象在层次结构中有兄弟姐妹,所以我们可以搜索对象,然后在这种情况下插入一个新节点。如果您要求它输出 HTML,那么根据 HTML 的规则,它将提供结束标记,即使它们一开始就不存在。
我需要使用 Nokogiri 获取倒数第二个脚本结束标记。
示例代码:
<head>
<script src="first.js"></script>
<script src="second.js"></script>
<!-- How to place some scripts here? -->
<script>
// init load
</script>
</head>
我试过这样的代码 doc.css('/html/head/script')[-2]
。但是,它将代码放在标签内。
不完全清楚你想要什么,因为你没有给我们预期的结果,但这似乎是你说的:
require 'nokogiri'
doc = Nokogiri::HTML(<<EOT)
<html>
<head>
<script src="first.js"></script>
<script src="second.js"></script>
<!-- How to place some scripts here? -->
<script>
// init load
</script>
</head>
</html>
EOT
doc.css('script')[-2].add_next_sibling("\n<script src='new_script.js'></script>")
这导致:
doc.to_html
# => "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n" +
# "<html>\n" +
# " <head>\n" +
# "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n" +
# " <script src=\"first.js\"></script>\n" +
# " <script src=\"second.js\"></script>\n" +
# "<script src=\"new_script.js\"></script>\n" +
# " <!-- How to place some scripts here? -->\n" +
# " <script>\n" +
# " // init load\n" +
# " </script>\n" +
# " </head>\n" +
# "</html>\n"
Nokogiri 的 XML::Node documentation 充满了有用的方法。我建议阅读它很多次。
Nokogiri 不知道关闭标签。解析后它知道有一个对象并且该对象在层次结构中有兄弟姐妹,所以我们可以搜索对象,然后在这种情况下插入一个新节点。如果您要求它输出 HTML,那么根据 HTML 的规则,它将提供结束标记,即使它们一开始就不存在。