解析元素的文本与里面空的元素

时间:2010-06-02 17:20:34

标签: python xml

我正在尝试使用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元素之后获取文本。

2 个答案:

答案 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)])