Ребята, подскажите, пожалуйста, как правильно определить пространство имен в XML файле при помощи lxml.
Мне нужен вот такой результат на выходе:
<?xml version=“1.0” encoding=“UTF-8”?>
<notificationRequest xmlns="http://www.meinpaket.de/xsd/dietmar/1.0/orders“
xmlns:common=”http://www.meinpaket.de/xsd/dietmar/1.0/common“
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“
version=”1.0">
Вот код, при помощи которого я генерирую XML:
import lxml.etree import os xmlns = "http://www.meinpaket.de/xsd/dietmar/1.0/orders" xmlns_xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns_common = "http://www.meinpaket.de/xsd/dietmar/1.0/common" NSMAP = {None: xmlns, 'xsi': xmlns_xsi} root = lxml.etree.Element('notificationRequest', nsmap=NSMAP) root = lxml.etree.Element('notificationRequest') root.set('xmlns', xmlns) root.set('version', '1.0') root.set('{http://www.w3.org/2001/XMLSchema-instance}common', xmlns_common) head = lxml.etree.SubElement(root, 'data') handle = lxml.etree.tostring(root, pretty_print=True, encoding='utf-8', xml_declaration=True) with open(os.path.join(os.getcwd(), "text.xml"), "wb") as f: f.write(handle)
Результат работы:
<?xml version='1.0' encoding='utf-8'?>
<notificationRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance“ xmlns=”http://www.meinpaket.de/xsd/dietmar/1.0/orders“ version=”1.0“ xsi:common=”http://www.meinpaket.de/xsd/dietmar/1.0/common">
в этом случае правильно прописывается xmlns:xsi, но common определяется с префиксом xsi, а не xmlns, как требуется.
Если же поменять URI на xmlns у аттрибута common:
root.set('{http://www.meinpaket.de/xsd/dietmar/1.0/orders}common', xmlns_common)
то получается полная ерунда:
<?xml version='1.0' encoding='utf-8'?>Появляется префикс ns0, а определение xmlns:xsi исчезает вовсе.
<notificationRequest xmlns:ns0="http://www.meinpaket.de/xsd/dietmar/1.0/orders“ xmlns=”http://www.meinpaket.de/xsd/dietmar/1.0/orders“ version=”1.0“ ns0:common=”http://www.meinpaket.de/xsd/dietmar/1.0/common">
Буду благодарен, если поможете разобраться. Сильно не бейте, если накосячил, пайтон только начал изучать. Язык нравится, но нужно к некоторым вещам выработать привычку)
Спасибо!