2012-04-21 3 views
4

나는 왜 lxml .text이 나에게 자식 태그를위한 텍스트를 줄 것인지, 루트 태그를위한 텍스트를 줄지에 대해 완전히 혼란 스럽다.lxml을 사용하여 루트 요소의 텍스트를 얻는 방법은 무엇입니까?

some_tag = etree.fromstring('<some_tag class="abc"><strong>Hello</strong> World</some_tag>') 

some_tag.find("strong") 
Out[195]: <Element strong at 0x7427d00> 

some_tag.find("strong").text 
Out[196]: 'Hello' 

some_tag 
Out[197]: <Element some_tag at 0x7bee508> 

some_tag.text 

some_tag.find("strong").text<strong> 태그 사이에있는 텍스트를 반환합니다.

나는 some_tag.text 모든 것을 예상

<some_tag> ... </some_tag> 사이를 반환 할 것으로 예상 :

<strong>Hello</strong> World 

대신, 아무 것도 반환하지 않습니다.

답변

0

나는 당신의 질문을 이해하기 모르겠어요하지만 당신은 구문 분석이 개 주요 솔루션이 있습니다

DOMParser 다음 langage를 따라가 node.getNodeValue의();

SAXParser를 다음 langage을 따라하는 것은 있지만, 예를 들어 자바의 fonction에 : 문자 (...)

내가 구글에 있지만, 파이썬에서 검색하지 않는 시간이, 내가 MiniDOM을 알고 (A DOM 파서) : http://www.blog.pythonlibrary.org/2010/11/12/python-parsing-xml-with-minidom/

제 대답이 당신을 도울 수 있기를 바랍니다.

+0

나는 미니 도트를 시도했지만 그 중 하나는 작동하지 않습니다. 'some_tag_md = minidom.parseString을 ('안녕하세요 세계')는 ' 는' 을 some_tag_md.nodeValue' : / –

0

이 정보가 도움이됩니까?

comp = [ etree.tostring(e) for e in some_tag] 
print ''.join(comp[0]) 

편집 : 감사 @mzjin 바른 길에 저를 착용하는

8
from lxml import etree 

XML = '<some_tag class="abc"><strong>Hello</strong> World</some_tag>' 

some_tag = etree.fromstring(XML) 

for element in some_tag: 
    print element.tag, element.text, element.tail 

출력 :

strong Hello World 

.text.tail 속성에 대한 자세한 내용은 다음을 참조하십시오

는 예상 정확하게 결과를 얻을 사용

print etree.tostring(some_tag.find("strong")) 

출력 : 당신은 사이의 모든 텍스트를 검색 할 수 붙박이 lxml이 방법을 사용할 필요가

<strong>Hello</strong> World 
0

태그.

from lxml import etree 
    xml='''<some_tag class="abc"><strong>Hello</strong> World</some_tag>''' 
    tree = etree.fromstring(xml) 
    print(''.join(tree.xpath('//text()'))) 
관련 문제