如何在Python中的两个xml标签之间获取整个内容?

我尝试得到一个开放的xml标签和它的关闭对应的整个内容.

在下面的标题中获取内容很简单,但是如果使用混合内容,并且我想保留内部标签,那么如何在标签之间获取整个内容?

<?xml version="1.0" encoding="UTF-8"?>
<review>
  <title>Some testing stuff</title>
  <text sometimes="attribute">Some text with <extradata>data</extradata> in it.
  It spans <sometag>multiple lines: <tag>one</tag>, <tag>two</tag> 
  or more</sometag>.</text>
</review>

我想要的是两个文本标签之间的内容,包括任何标签:具有< extradata> data< / extradata>的一些文本在里面.它跨越< sometag>多行:< tag> one< / tag>< tag> two< / tag>或更多< / sometag&gt ;. 现在我使用正则表达式,但它有点混乱,我不喜欢这种方法.我倾向于基于XML解析器的解决方案.我看过minidom,etree,lxml和BeautifulSoup,但找不到这种情况的解决方案(整个内容,包括内部标签).

from lxml import etree
t = etree.XML(
"""<?xml version="1.0" encoding="UTF-8"?>
<review>
  <title>Some testing stuff</title>
  <text>Some text with <extradata>data</extradata> in it.</text>
</review>"""
)
(t.text + ''.join(map(etree.tostring, t))).strip()

这里的诀窍是t是可迭代的,当迭代时,产生所有子节点.因为etree避免了文本节点,您还需要使用t.text在第一个子标签之前恢复文本.

In [50]: (t.text + ''.join(map(etree.tostring, t))).strip()
Out[50]: '<title>Some testing stuff</title>\n  <text>Some text with <extradata>data</extradata> in it.</text>'

要么:

In [6]: e = t.xpath('//text')[0]

In [7]: (e.text + ''.join(map(etree.tostring, e))).strip()
Out[7]: 'Some text with <extradata>data</extradata> in it.'
翻译自:https://stackoverflow.com/questions/11122397/how-do-i-get-the-whole-content-between-two-xml-tags-in-python

转载注明原文:如何在Python中的两个xml标签之间获取整个内容?