2011-04-09 38 views
1

如何以遞歸方式匹配包含文本的所有子節點。XPath匹配包含文本的每個節點

如果我有一棵樹一樣

table 
tr 
    td 
    "hello" 
    td 
    b 
    "hi" 
tr 
    td 
    "salud" 
    td 
    em 
    "bonjour" 

如何使用XPath表節點中的每一個字符串匹配嗎? 就像「// table/*/text()」?

回答

3

你給XPath表達式幾乎已正確:

//table//text()

將讓你的所有表中的所有文本節點在文件中。

+0

+1正確答案。 – 2011-04-09 13:52:18

+0

+1我也需要這個 – 2011-08-04 07:10:57

0

以下情況如何?

from lxml import etree 
from StringIO import StringIO 

input = ''' 
<table> 
<tr> 
    <td>hello</td> 
    <td><b>hi</b></td> 
</tr> 
<tr> 
    <td>salud</td> 
    <td><em>bonjour</em></td> 
</tr> 
</table> 
''' 

parser = etree.HTMLParser() 
tree = etree.parse(StringIO(input), parser) 

for p in tree.xpath("//table/tr/td//text()"): 
    print p 

...這給輸出:

hello 
hi 
salud 
bonjour 
+0

如果我想要節點的名稱而不是節點的文本怎麼辦? – 2018-01-03 20:33:14