4

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 フラグメント ドキュメントの最後にデータを追加するのには適していません。

4

1 に答える 1

3

によって参照されるドキュメントは、完全な xml ドキュメント (「完全な xml infoset」)であるxi:xinclude 必要があります。events.xml要素を含む単一のルートがないため、有効な xml ドキュメントではありません。

xpointer属性を使用してイベント要素を選択することにより、サブセットのみを含めることができる場合があります。ただし、lxml がこの属性をサポートしているかどうかはわかりません。

于 2012-01-11T22:55:43.663 に答える