2011-04-09 5 views
1

텍스트가 포함 된 모든 하위 노드를 재귀 적으로 일치시키는 방법은 무엇입니까?XPath가 텍스트가 포함 된 모든 노드와 일치합니다.

나는 경우

내가 XPath는 함께 테이블 노드 내에서 모든 단일 문자열과 일치 어떻게
table 
tr 
    td 
    "hello" 
    td 
    b 
    "hi" 
tr 
    td 
    "salud" 
    td 
    em 
    "bonjour" 

같은 나무? "// table/*/text()"와 (과) 비슷한가요?

답변

3

XPath 식은 이미 거의 정확했다 :

//table//text()

당신에게 모든 테이블 내의 모든 텍스트 노드를 얻을 것이다 출력을 제공

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 

... 문서에서.

+0

+1 정답. –

+0

+1 나는 이것도 필요로했다. –

0

다음은 어때요? 당신이 준

hello 
hi 
salud 
bonjour 
+0

노드의 텍스트가 아니라 노드의 이름을 원하면 어떻게해야합니까? –

관련 문제