1

lxml と Python を使用して XML ファイルを印刷しようとしています。

コードは次のとおりです。

>>> from lxml import etree
>>> root = etree.Element('root')
>>> child = etree.SubElement(root, 'child')
>>> print etree.tostring(root, pretty_print = True, xml_declaration = True, encoding = None)

出力:

<?xml version='1.0' encoding='ASCII'?>
<root>
  <child/>
</root>

ご覧のとおり、 を宣言しましたが、最終出力にはencoding = Noneまだ表示されています。encoding = 'ASCII'私が推測するものは期待されています。タグを入れないとencoding、まだ ASCII が表示されます。

エンコーディング部分ではなく、XML バージョン タグだけを取得する方法はありますか? 出力を次のようにしたい:

<?xml version='1.0'>
4

1 に答える 1

-2

有効な XML である限り、lxml.etree が何を出力するかは問題ではありません。本当にしたい場合は、文字列を接着することができます:

'<?xml version="1.0"?>\n' + etree.tostring(root, pretty_print = True, encoding = 'ASCII')

最終的に XML は何かを理解するためにどの文字セットに入っているかを知る必要があるため、なぜそれを削除したいのかは不明です。XML 1.0 仕様には、文字セットを推測する方法が含まれており、エンコード宣言の使用を推奨しているようです。

[外部情報] がない場合、バイト オーダー マークでもエンコーディング宣言でもないエンティティが UTF-8 以外のエンコーディングを使用すると、致命的なエラーになります。

...

上位レベルのプロトコルによってエンコーディングが決定されない限り、XML エンティティにエンコーディング宣言が含まれておらず、その内容が有効な UTF-8 または UTF-16 でない場合も致命的なエラーです。

于 2010-05-24T19:24:04.023 に答える