Napisałem skrypt, który wypisze wszystkie pliki .xml w bieżącym katalogu w formacie xml, ale nie mogę wymyślić, jak dodać atrybuty xmlns do góry znacznik poziomu. Wyjście chcę uzyskać to:Python: dodawanie atrybutów schematu XML za pomocą 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>
Jednak tutaj jest wyjście otrzymuję:
<?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>
Oto mój skrypt:
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
Znalazłem jakiś przykłady online jawnie ustawiające atrybuty przestrzeni nazw, here i here, ale szczerze mówiąc, przeszły trochę ponad moją głowę, kiedy dopiero zaczynam. Czy istnieje inny sposób dodawania tych atrybutów xmlns do znacznika databaseChangeLog?
To działało, dzięki tak dużo! Czy wiesz, jak sformatować wyjście podobne do tego, co jest w moich pożądanych wynikach powyżej? Pomyślałem, że pretty_print może pomóc w tym, ale to nie pomaga :( – user1420913
Niestety, nie wiem na temat solidnego sposobu, aby to zrobić – unutbu
Nie ma problemu, dziękuję za pomoc :) – user1420913