lxml xml使用xml标记内的html标记进行解析

时间:2013-11-07 12:19:58

标签: python html xml xml-parsing lxml

<xml>
<maintag>    
<content> lorem <br>ipsum</br> <strong> dolor sit </strong> and so on </content>
</maintag>
</xml>

我经常解析的xml文件可能在内容标记内部有html标记,如上所示。

这里我是如何解析文件的:

parser = etree.XMLParser(remove_blank_text=False)
tree = etree.parse(StringIO(xmlFile), parser)
for item in tree.iter('maintag'):
  my_content = item.find('content').text
  #print my_content
  #output: lorem

结果导致my_content =' lorem '而不是 - 我想看到 - 'lorem&lt; br&gt; ipsum&lt; / BR&GT; &LT;强大&gt; dolor sit&lt; / strong&gt;等等'

我怎样才能将内容读作'lorem&lt; BR&GT; ipsum的&LT; / BR&GT; &LT;强大&gt; dolor sit&lt; / strong&gt;等等'?

注意:内容标记可能包含其他html标记而不是强标记。可能根本没有它们。

1 个答案:

答案 0 :(得分:1)

from lxml import etree
root = etree.fromstring('''<xml>
<maintag>    
<content> lorem <br>ipsum</br> <strong> dolor sit </strong> and so on </content>
</maintag>
</xml>''')
for content in root.xpath('.//maintag/content'):
    print etree.tostring(content)

打印

<content> lorem <br>ipsum</br> <strong> dolor sit </strong> and so on </content>

....
for content in root.xpath('.//maintag/content'):
    print ''.join(child if isinstance(child, basestring) else etree.tostring(child)
                  for child in content.xpath('*|text()'))

打印

 lorem <br>ipsum</br>  <strong> dolor sit </strong> and so on  and so on