【发布时间】:2018-10-05 05:55:32
【问题描述】:
在 R 中我可以得到想要的结果。
library(xml2)
root = read_html("<div><p>abc<br> xyz</p></div>")
elements = xml_find_all(root, "//.")
xml_path(elements)
#> [1] "/" "/html"
#> [3] "/html/body" "/html/body/div"
#> [5] "/html/body/div/p" "/html/body/div/p/text()[1]"
#> [7] "/html/body/div/p/br" "/html/body/div/p/text()[2]"
节点
(/html/body/div/p/text()[1], /html/body/div/p/text()[2]) 是需要的。
在 python 中,当我使用 lxml 的 getpath 时出现错误,因为一些裸露的文本元素也与节点元素一起返回。
root = html.fromstring("<div><p>abc<br> xyz</p></div>")
elements = root.xpath("//.")
xpath_elements = [etree.ElementTree(root).getpath(x) for x in elements]
但是当我使用以节点结尾的 xpath 时,我不会得到与使用 R 的 xml2 相同的结果
root = html.fromstring("<div><p>abc<br> xyz</p></div>")
elements = root.xpath("//*")
xpath_elements = [etree.ElementTree(root).getpath(x) for x in elements]
print(xpath_elements)
#> ['/html', '/html/body', '/html/body/div', '/div/p', '/div/p/br']
如何生成 R 的 xml2 库生成的所需 xpath 结果。
【问题讨论】:
-
我认为python不加载html并且像xml一样工作,在这种情况下php像R一样工作,如果不存在则加载html/head/body。探测它由你自己添加。
-
目标节点 xpath 应该像这样“*/text()[1]”结束。好吧,我会尝试找出解决方法。