私はこのような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 タグを取り除きます。この動作を無効にする方法が見つかりませんでした。