我有一些看起来像这样的 SGML
<!DOCTYPE sometype>
<ITEM>
<DATE>19-OCT-1987</DATE>
<TEXT>
<TITLE>I AM THE TITLE</TITLE>
<AUTHOR>I AM THE AUTHOR</AUTHOR>
<DATELINE>WHEN I WAS CREATED</DATELINE><BODY>
I WANT TO PRESERVE THIS TAG!
</BODY></TEXT>
</ITEM>
<ITEM>...
我试图用 lxml.html 解析它,但它似乎剥离了我需要保留的 BODY 标签。接下来我尝试使用 lxml.etree,但正如您所见,所有 ITEM 标记都没有共同的父元素。我目前使用的代码
doc = """<!DOCTYPE sometype>
<ITEM>
<DATE>19-OCT-1987</DATE>
<TEXT>
<TITLE>I AM THE TITLE</TITLE>
<AUTHOR>I AM THE AUTHOR</AUTHOR>
<DATELINE>WHEN I WAS CREATED</DATELINE><BODY>
I WANT TO PRESERVE THIS TAG!
</BODY></TEXT>
</ITEM>"""
from lxml import etree
parser = etree.XMLParser(recover=True) # I have invalid HTML chars to ignore
sgml = etree.fromstring(doc, parser)
现在 sgml 只是第一个 ITEM 元素。我需要它是所有 ITEM 元素。有任何想法吗?lxml.html 做我想做的事,但默认情况下它会去除 BODY 标记,而且我还没有找到禁用此行为的方法。