html - Nokogiri:当 HTML 代码无效时,x-path 查询失败
问题描述
我有一个(稍微)无效的 HTML 文档,如下所示:
<p>
1
</p>
<p>
<div>
2
</div>
</p>
<p>
3
</p>
W3C 不允许div
在p
.
因此 Chrome(以及我猜的许多其他浏览器)隐含地更正了 HTML 代码,如下所示(如本文所述:将 <div> 放入 <p> 正在添加一个额外的 <p>):
<p>
1
</p>
<p>
</p>
<div>
2
</div>
<p>
</p>
<p>
3
</p>
浏览器通过添加第二个来更正 HTML p
,现在有 2 个空p
的和一个div
位于根级别的。对于浏览器来说,这是真实的世界,它总是会说总共有 4p
个。
我正在使用此处描述p
的 Javascript构建最后一个 xpath:如何使用 Firebug xpath.js 脚本?prevSibling
prevSibling
正在迭代所有 3 个之前p
的返回值/p[4]
,p
这在 W3C 定义(和浏览器)方面是完全正确的。
然而,Nokogiri 省略了第二个空p
并添加了一个错误:
意外的结束标签:p
对于 Nokogiri,总共只有 3p
个这样的:
<p>
1
</p>
<p>
</p>
<div>
2
</div>
<p>
3
</p>
因此,当我从我的 Javascript 代码(即/p[4]
)中获得“正确”的 xpath 时,我想p
使用 Nokogiri访问最后一个at_xpath("/p[4]")
。但我得到nil
是因为 Nokogiri 只有 3 p
。
如何让 Nokogiri 以与浏览器相同的方式处理无效 HTML(即添加第二个空的 HTML ),以便在通过搜索访问它时p
获得最后一个?p
/p[4]
解决方案
推荐阅读
- c# - AvalonDock:更改 AnchorablePanes 的标题高度
- angular - 不能两者兼得,在 ionic ion-range 中手动订阅更新和设置值
- python - 在所有列中将 pandas 数据框中的空格替换为 0
- slurm - 使用更多 cpu 使用 slurm 并行化作业
- c++ - 按值捕获 lambda 中的变量, const_cast 它和 std::move 它 - 未定义的行为?
- python - Python Pandas:如何仅对几列中的数据进行平均 >1000?
- javascript - 我如何知道 JS 中的第二行位置?
- css - Tailwind css悬停不改变文本颜色
- docker - Docker命令行页面历史记录不适用于python:3.7.6-buster
- javascript - 以编程方式单击反应组件