2009-05-14 25 views
6

Bu örneğe benzer LXML kullanarak bir ad belirtmek için çalışıyorum boşluklarında ekleyerek (here alınan):Python: lxml

<TreeInventory xsi:noNamespaceSchemaLocation="Trees.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
</TreeInventory> 

Ben şema örneği nasıl ekleneceğini emin değilim Şema konumu ve kullanımı. Bir örnek olsa bunu nasıl belirleneceğini emin değilim

>>> NS = 'http://www.w3.org/2001/XMLSchema-instance' 
>>> TREE = '{%s}' % NS 
>>> NSMAP = {None: NS} 
>>> tree = etree.Element(TREE + 'TreeInventory', nsmap=NSMAP) 
>>> etree.tostring(tree, pretty_print=True) 
'<TreeInventory xmlns="http://www.w3.org/2001/XMLSchema-instance"/>\n' 

ve sonra da bir konum belirtmek: documentation bana böyle bir şey yaparak, başladık. Bu etree.Elementnsmap anahtar kelime-arg ile yapılabilir gibi görünüyor, ama nasıl görmüyorum. netlik için biraz daha adımlarda

cevap

8

:

>>> NS = 'http://www.w3.org/2001/XMLSchema-instance' 

Bildiğim kadarıyla gördüğünüz gibi, bu, değil TreeInventory elemanı isimalanlı istediğiniz nitelik noNameSpaceSchemaLocation olduğunu. Yani: gelince

>>> elem = etree.Element('TreeInventory') 
>>> elem.set(location_attribute, 'Trees.xsd') 

:

>>> location_attribute = '{%s}noNameSpaceSchemaLocation' % NS 
>>> elem = etree.Element('TreeInventory', attrib={location_attribute: 'Trees.xsd'}) 
>>> etree.tostring(elem, pretty_print=True) 
'<TreeInventory xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Trees.xsd"/>\n' 

Bu Sen nitelikler olmadan, aynı zamanda ilk elemanını oluşturmak elbette olabilir ve daha sonra böyle niteliği, set ... ne istediğini benziyor nsmap parametresi: Yalnızca serileştirmede hangi öneklerin kullanılacağını tanımlamak için kullanıldığına inanıyorum. Bu durumda, lxml, söz konusu ad alanı için yaygın olarak kullanılan önekin "xsi" olduğunu bildiği için gerekli değildir. Eğer iyi bilinen bir isim alanı olmasaydı, tercih ettiğin öneki belirtmedikçe, muhtemelen "ns0", "ns1" gibi önekleri göreceksin. (Unutmayın: önekin önemi yoktur)

+0

Sadece küçük düzeltme: noNamespaceSchemaLocation olmalı, noNameSpaceSchemaLocation. –

İlgili konular