2013-03-12 21 views
5
ile ekleyin

Geçerli dizinde tüm .xml dosyalarını xml biçiminde yazdıran bir komut dosyası yazdım ancak xmlns özniteliklerinin nasıl ekleneceğini anlayamıyorum. seviye etiketi Burada, AncakPython: xml şema özniteliklerini lxml

<?xml version='1.0' encoding='utf-8'?> 
<databaseChangeLog 
     xmlns="http://www.host.org/xml/ns/dbchangelog" 
     xmlns:xsi="http://www.host.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="www.host.org/xml/ns/dbchangelog"> 

    <include file="cats.xml"/> 
    <include file="dogs.xml"/> 
    <include file="fish.xml"/> 
    <include file="meerkats.xml"/> 

</databaseChangLog> 

alıyorum çıkışı: Almak istediğim çıkışı Bazı buldum

import lxml.etree 
import lxml.builder 
import glob 

E = lxml.builder.ElementMaker() 
ROOT = E.databaseChangeLog 
DOC = E.include 

# grab all the xml files 
files = [DOC(file=f) for f in glob.glob("*.xml")] 
the_doc = ROOT(*files) 

str = lxml.etree.tostring(the_doc, pretty_print=True, xml_declaration=True, encoding='utf-8') 

print str 

: Burada

<?xml version='1.0' encoding='utf-8'?> 
<databaseChangeLog> 
    <include file="cats.xml"/> 
    <include file="dogs.xml"/> 
    <include file="fish.xml"/> 
    <include file="meerkats.xml"/> 
</databaseChangLog> 

benim senaryom ad alanı özniteliklerini açıkça belirten örnekler, here ve here, ancak dürüst olmak gerekirse, yeni başladığım için başımın biraz üzerinde gittiler. Bu xmlns niteliklerini databaseChangeLog etiketine eklemenin başka bir yolu var mı? bu kadar, teşekkürler çalıştı

cevap

8
import lxml.etree as ET 
import lxml.builder 
import glob 

dbchangelog = 'http://www.host.org/xml/ns/dbchangelog' 
xsi = 'http://www.host.org/2001/XMLSchema-instance' 
E = lxml.builder.ElementMaker(
    nsmap={ 
     None: dbchangelog, 
     'xsi': xsi}) 

ROOT = E.databaseChangeLog 
DOC = E.include 

# grab all the xml files 
files = [DOC(file=f) for f in glob.glob("*.xml")] 

the_doc = ROOT(*files) 
the_doc.attrib['{{{pre}}}schemaLocation'.format(pre=xsi)] = 'www.host.org/xml/ns/dbchangelog' 

print(ET.tostring(the_doc, 
        pretty_print=True, xml_declaration=True, encoding='utf-8')) 

verimleri

<?xml version='1.0' encoding='utf-8'?> 
<databaseChangeLog xmlns:xsi="http://www.host.org/2001/XMLSchema-instance" xmlns="http://www.host.org/xml/ns/dbchangelog" xsi:schemaLocation="www.host.org/xml/ns/dbchangelog"> 
    <include file="test.xml"/> 
</databaseChangeLog> 
+0

! Çıkışı, yukarıda istediğim çıktıya benzer şekilde nasıl biçimlendireceğimi biliyor musunuz? Ben pretty_print bununla ilgili yardımcı olabileceğini düşündüm ama yardımcı olmadı :( – user1420913

+0

Üzgünüm, bunu yapmanın sağlam bir yolunu bilmiyorum. – unutbu

+0

Hiç sorun değil, yardımın için teşekkürler :) – user1420913

İlgili konular