lxml中的html.xpath(“ // text()”)

时间:2019-12-13 14:51:39

标签: python-3.x xpath lxml

我正在阅读带有以下演示的lxml教程:

#+BEGIN_SRC ipython :session lxml :results output
print(html.xpath("string()")) # lxml.etree only!
# TEXTTAIL
print(html.xpath("//text()")) # lxml.etree only!
#  ['TEXT', 'TAIL']
#+END_SRC

#+RESULTS:
: TEXTTAIL
: ['TEXT', 'TAIL']

我对//中的html.xpath("//text()"感到困惑

如果将其删除,则会返回一个空列表。

#+begin_src ipython :session lxml :results output
print(html.xpath("text()"))
#+end_src

#+RESULTS:
: []

1 个答案:

答案 0 :(得分:1)

来自XPath 1.0 spec

  

//是/ descendant-or-self :: node()/的缩写。例如,// para是   / descendant-or-self :: node()/ child :: para的缩写,因此将选择   文档中的任何para元素(甚至是   由于document元素将由// para选择document元素   node是根节点的子节点); div // para的缩写   div / descendant-or-self :: node()/ child :: para,因此将选择所有para   div孩子的后代。

因此//text()等效于/descendant-or-self::node()/child::text(),它将选择文档中的所有文本节点。

删除//时,只会选择当前上下文的子节点(无论html是什么)。