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

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

这里我如何解析文件:

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 ipsum

结果它导致 my_content = ' lorem ipsum ' 而不是 - 我想看到 - ' lorem ipsum dolor sit 等等'

我如何阅读内容为“lorem ipsum dolor sit 等”?

注意:内容标签可能有另一个标签而不是强标签。并且可能根本没有它们。

4

1 回答 1

2

_Element.text property returns only the text before the first subelement.

Try following:

>>> from lxml import etree
>>> from StringIO import StringIO
>>> xmlFile = '''
... <xml>
... <maintag>
... <content> lorem ipsum <strong> dolor sit </strong> and so on </content>
... </maintag>
... </xml>
... '''
>>> parser = etree.XMLParser(remove_blank_text=False)
>>> tree = etree.parse(StringIO(xmlFile), parser)
>>> for my_content in tree.xpath('maintag/content//text()'):
...       print my_content
...
 lorem ipsum
 dolor sit
 and so on

or:

>>> for my_content in tree.find('maintag/content').itertext():
...     print my_content
...
 lorem ipsum
 dolor sit
 and so on


>>> ' '.join(tree.find('maintag/content').itertext())
' lorem ipsum   dolor sit   and so on '
>>> ' '.join(t.strip() for t in tree.find('maintag/content').itertext())
'lorem ipsum dolor sit and so on'
于 2013-11-06T13:23:32.833 回答