Как генерировать XML-документы с пространствами имен в Python

В нескольких экспериментах в моей магистерской диссертации (например, стр. 59) я обнаружил, что смещение может быть важным для первого слоя (ов), но особенно на полностью связанных слоях на end, похоже, не играет большой роли.

Это может сильно зависеть от сетевой архитектуры / набора данных.

24
задан phihag 14 May 2009 в 14:51
поделиться

2 ответа

Эта функция уже предлагается; патч дремлет в базе данных ошибок Python . См. Ответ Томалака (вкратце: вручную добавьте атрибут xmlns ) для обходного пути.

5
ответ дан 29 November 2019 в 00:12
поделиться

createElementNS() определяется как:

def createElementNS(self, namespaceURI, qualifiedName):
    prefix, localName = _nssplit(qualifiedName)
    e = Element(qualifiedName, namespaceURI, prefix)
    e.ownerDocument = self
    return e

, поэтому…

import xml.dom.minidom
doc = xml.dom.minidom.Document()
el = doc.createElementNS('http://example.net/ns', 'ex:el')
#--------------------------------------------------^^^^^
doc.appendChild(el)
print(doc.toprettyxml())

дает:

<?xml version="1.0" ?>
<ex:el/>

… не совсем там…

import xml.dom.minidom
doc = xml.dom.minidom.Document()
el = doc.createElementNS('http://example.net/ns', 'ex:el')
el.setAttribute("xmlns:ex", "http://example.net/ns")
doc.appendChild(el)
print(doc.toprettyxml())

приводит к:

<?xml version="1.0" ?>
<ex:el xmlns:ex="http://example.net/ns"/>

альтернативно:

import xml.dom.minidom
doc = xml.dom.minidom.Document()
el = doc.createElementNS('http://example.net/ns', 'el')
el.setAttribute("xmlns", "http://example.net/ns")
doc.appendChild(el)
print(doc.toprettyxml())

, который производит:

<?xml version="1.0" ?>
<el xmlns="http://example.net/ns"/>

Похоже, вам придется сделать это вручную , Element.writexml() не показывает никаких признаков того, что пространства имен будут подвергаться какой-либо специальной обработке.

РЕДАКТИРОВАТЬ: Этот ответ предназначен только для xml.dom.minidom, так как ОП использовал его в вопросе. Я не указываю, что вообще невозможно было использовать пространства имен XML в Python. ; -)

21
ответ дан Tomalak 29 November 2019 в 00:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: