2010-06-02 5 views
1

많은 테이블을 사용하는 XHTML 문서를 xml.etree를 사용하여 Python의 의미 론적 XML 문서로 변환하려고합니다. 그러나, 나는이빈 요소가있는 요소의 텍스트를 구문 분석

<lines> 
    <line>Textline1</line> 
    <line>Textline2</line> 
    <line>Textline3</line> 
</lines> 

문제처럼 뭔가이 XHTML

<TD> 
    Textline1<BR/> 
    Textline2<BR/> 
    Textline3 
</TD> 

변환 몇 가지 문제가 있어요 나는 BR 요소 후 텍스트를 얻는 방법을 모르는 것입니다.

답변

1

:

BeautifulSoup 잘 포맷되지 않았습니다 구문 분석 XML 또는 HTML에 좋은 곳입니다. 푸 아무도하지 않는 경우

import xml.etree.ElementTree as et 

doc = """<TD> 
    Textline1<BR/> 
    Textline2<BR/> 
    Textline3 
</TD> 
""" 

e = et.fromstring(doc) 

items = [] 
for x in e.getiterator(): 
    if x.text is not None: 
     items.append(x.text.strip()) 
    if x.tail is not None: 
     items.append(x.tail.strip()) 

doc2 = et.Element("lines") 
for i in items: 
    l=et.SubElement(doc2, "line") 
    l.text = i 

print(et.tostring(doc2)) 
+0

아 ~이'사용'하지'만약 foo는 = 당신이, 내가 평소 잘 존이야 물론 None' –

+0

!. 나는 방금 지난 9 시간 동안 자바 코딩을 했으므로 미끄러졌다. ( – EnigmaCurry

+1

9 시간짜리 자바 코딩과 같은 문장을 사용하려면 정말로 심각한 범죄를 저질렀 음에 틀림 없다. –

0

비어있는 태그가 문제가되지 않는다고 생각합니다. xml.etree는 자식 요소와 베어 텍스트 노드가 함께 섞일 것을 기대하지 않을 수 있습니다. 당신은 <BR> 요소의 .tail 속성을 사용할 필요가

import BeautifulSoup 
soup = BeautifulSoup.BeautifulSoup(open('in.html').read()) 
print "\n".join(["<line>%s</line>" % node.strip() for node in soup.find('td').contents if isinstance(node, BeautifulSoup.NavigableString)])