我正在尝试使用xml.etree将使用大量表的XHTML文档转换为Python中的语义XML文档。但是,我在转换这个XHTML时遇到了一些麻烦
<TD>
Textline1<BR/>
Textline2<BR/>
Textline3
</TD>
这样的事情
<lines>
<line>Textline1</line>
<line>Textline2</line>
<line>Textline3</line>
</lines>
问题在于我不知道如何在BR元素之后获取文本。
答案 0 :(得分:1)
您需要使用&lt; br&gt;的.tail属性。元件。
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))
答案 1 :(得分:0)
我不认为标签是空的是你的问题。 xml.etree可能不希望你将子元素和裸文本节点混合在一起。
BeautifulSoup非常适合解析格式不正确的XML或HTML:
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)])