Python で lxml を使用して単純な xml ログファイル クラスを開発しています。
これまでの私のアプローチは、2 つのファイルを使用することでした。XML フラグメントである 2 番目のファイルを含む整形式の XML ファイル。xi:include 要素を使用しています。<event>
このように、ファイルの末尾に要素を追加するだけで、XML フラグメントを効率的に更新できます。
整形式の XML ファイル (「logfile.xml」) は次のようになります。
<?xml version="1.0"?>
<logfile>
<event xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include href="events.xml"/>
</event>
</logfile>
xml フラグメント (「events.xml」) は次のようになります。
<event>
<data></data>
</event>
<event>
<data></data>
</event>
<event>
<data></data>
</event>
私の目標は、次のようになることです。
<?xml version="1.0"?>
<logfile>
<event>
<data></data>
</event>
<event>
<data></data>
</event>
<event>
<data></data>
</event>
</logfile>
Python では、整形式の XML ファイル ('logfile.xml') の xi:include 要素を処理するために xinclude メソッドを使用しています。これは機能しますが<event>
、XML フラグメント ('events.xml') の要素が1 つある場合のみです。
私のpythonコード:
tree = etree.parse('logfile.xml')
tree.xinclude()
root = tree.getroot()
print etree.tostring(self.logfileNode, pretty_print=True, xml_declaration=True, encoding='UTF-8')
私が見ているエラー:
lxml.etree.XIncludeError: Extra content at the end of the document
イベントを別の要素に含めることもできますが、これは XML フラグメント ドキュメントの最後にデータを追加するのには適していません。