19

Python と lxml を使用して、次のような xml エントリを作成しようとしています。

<resource href="Unit 4.html" adlcp:scormtype="sco">

私はpythonとlxmlを使用しています。属性で困っていadlcp:scormtypeます。私はxmlを初めて使用するので、間違っている場合は修正してください。 adlcpは名前空間でありscormtype、adlcp 名前空間で定義されている属性ですよね?
これが正しい質問かどうかさえわかりませんが...私の質問は、lxmlを使用してデフォルト以外の名前空間から要素に属性を追加するにはどうすればよいですか? これが些細な質問である場合は、事前にお詫び申し上げます。

4

2 に答える 2

17

これは完全な回答ではなく、いくつかの指針です。

adlcp は名前空間ではなく、名前空間のプレフィックスです。名前空間は、次のような属性によってドキュメントで定義されますxmlns:adlcp="http://xxx/yy/zzz"

lxml では、scormtype だけでなく、名前空間などを含む要素/属性名を常に設定します {http://xxx/yy/zzz}scormtype 。lxml は名前空間プレフィックスを自動的に挿入します。ただし、さらにいじらない限り、lxml はプレフィックスを ns0 などに設定しますが、プレフィックスは何も意味しないため、それで十分です。(ただし、プレフィックス名を制御することを好む人もいます。Element 関数と SubElement 関数の nsmap 引数、および register_namespace 関数を参照してください)。

名前空間に関するlxmlチュートリアルと、 Dive into Python - XMLの章も見ていきます

于 2009-09-03T17:13:08.863 に答える
9

これを試して:

builder = ElementMaker(namespace="http://a.different.url/blah/v.10",
                       nsmap={
                         'adlcp': "http://a.namespace.url/blah/v.10",
                         'anotherns': "http://a.different.url/blah/v.10"
                       })

builder.resource()
builder.attrib['href'] = "Unit 4.html"
builder.attrib['{http://a.namespace.url/blah/v.10}scormtype'] = 'sco'

print(etree.tostring(builder, pretty_print=True))
于 2015-01-15T05:07:50.370 に答える