2009-09-03 15 views
9

bir özelliğe bir ad eklemek için:Bunu kullanarak piton ve LXML gibi görünen bir xml giriş oluşturmak için çalışıyorum Nasıl LXML

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

Ben piton ve LXML kullanıyorum. adlcp:scormtype özniteliğiyle sorun yaşıyorum. Ben xml için yeniyim, eğer yanılıyorsam lütfen beni düzeltin. adlcp bir ad boşluğudur ve scormtype adlcp ad alanında tanımlanmış bir özniteliktir, değil mi?
Bu doğru soru olup olmadığından emin değilim ama ... Sorum şu; lxml kullanarak varsayılan olmayan bir ad boşluğundan bir öğeye nasıl bir özellik ekleyebilirim? Bu önemsiz bir soru ise önceden özür dilerim.

cevap

15

Bu tam bir yanıt değil sadece birkaç işaretçi.

adlcp ad alanı değil, bir ad alanı öneki. Ad alanı, belgede xmlns:adlcp="http://xxx/yy/zzz"

gibi bir öznitelikle tanımlanır. Lxml'de her zaman ad alanı da dahil olmak üzere bir öğe/özellik adı atarsınız. Sadece scormtype yerine {http://xxx/yy/zzz}scormtype. lxml daha sonra otomatik olarak bir isim alanı önekine konacaktır. Bununla birlikte, lxml önceliği ns0 ya da benzeri olarak ayarlayamazsınız, aksi takdirde daha basit bir işlem yapmazsınız, ancak önek hiçbir şey ifade etmedikçe yeterli olmalıdır. (Ancak bazı kişiler önek adını kontrol etmeyi tercih eder; Eleman ve Alt Fonksiyon fonksiyonlarındaki nsmap argümanına ve register_namespace fonksiyonuna bakınız).

Ben lxml tutorial on namespace bakardım ve ayrıca Dive into Python - XML chapter

+0

piton bağlantı dalın ölü (410 Gitti) –

+0

@JonasWielicki olduğu - yeni bağlantı ile güncellendi – Mark

4

deneyin:

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)) 
İlgili konular