在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']
如何生成所需的xpath结果,就像R的xml2库生成的那样。你知道吗
在
lxml
root.xpath(XPATH)
中,文本节点作为字符串返回,而不是作为元素对象返回。你知道吗您可以尝试以下解决方法(它仍然不会以与R相同的方式工作):
另一方面,由于
list.index(element)
返回第一次element
出现的索引,这将不适用于具有完全相同文本节点的节点,例如<p>QWERTY<br>QWERTY</p>
。这是一个非常罕见的案件,但让我知道如果你需要处理这样的案件也相关问题 更多 >
编程相关推荐