lxml v4.4 より前では、lxml.etree.iterwalkは要素と処理命令をウォークスルーします。
次のコードを使用します。
from lxml import etree
XML = """<root>
<?page no="1"?>
<element key='value'>text</element>
<element>text</element>tail<?page no="2"?>
<empty-element xmlns="http://testns/"/>
</root>"""
context = etree.iterwalk(etree.XML(XML), events=("start",))
for action, elem in context:
if isinstance(elem, etree._ProcessingInstruction):
print(f"{action}: {elem.target} {elem.text}")
else:
print(f"{action}: {elem.tag}")
私が持っていた:
start: root
start: page no="1"
start: element
start: element
start: page no="2"
start: {http://testns/}empty-element
しかし、lxml v4.4 以降では、次のようになりました。
start: root
start: element
start: element
start: {http://testns/}empty-element
処理命令は無視されるようになりました。なんで?
以前の動作を復元するにはどうすればよいですか?