解析元素内部为空元素的文本
问题描述:
我试图将使用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元素之后的文本。
答
您需要使用<BR>元素的.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))
答
我不认为标签为空是您的问题。 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)])
aarrgghh使用'如果foo是不无:''不富,如果= None' – 2010-06-02 22:32:01
当然,你是对的约翰,我通常会!我刚刚花了最后9个小时编码Java,所以我滑倒:( – EnigmaCurry 2010-06-02 23:57:21
你必须犯下一个非常严重的罪行才值得用9小时的Java编码这样的句子。 – 2010-06-03 01:12:06