Как удалить префикс 'ns1' с помощью PyXB или JaXB?

Из этого файла xsd:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"  
           targetNamespace="http://foo.org/FooIsNotBar" 
           elementFormDefault="qualified">
<xs:element name="Foo" type="xs:string"/> 
</xs:schema>

Я хочу использовать PyXB, чтобы получить этот XML:

<?xml version="1.0" ?>
<Foo xmlns="http://foo.org/FooIsNotBar">hello</Foo>

Итак, я сделал это:

pyxbgen -m test -u test.xsd # Where test.xsd is the above xsd file
echo -e "import test\\nprint test.Foo('Hello World').toxml()" | python

К сожалению, я получаю XML с нежелательным ns1 префикс:

<?xml version="1.0" ?>
<ns1:Foo xmlns:ns1="http://foo.org/FooIsNotBar">Hello World</ns1:Foo>

Я хотел бы избавиться от этих ns1: префиксы. Как?

РЕДАКТИРОВАТЬ

Этот вопрос о jaxb дает мне некоторые подсказки по этому поводу, но я пока не нашел решения своей проблемы.

Я обнаружил, что могу установить свой префикс с помощью test.Namespace.setPrefix('foo'), К сожалению, я не могу скрыть префикс.

Грязное решение было бы сделать это:

import test
rmp = 'REMOVE_ME_PLEASE'
test.Namesapce.setPrefix(rmp)
print test.Foo('Hello World').toxml().replace(rmp + ':', '').replace(':' + rmp, '')

1 ответ

Решение

Вы не можете просто удалить префикс, потому что XML больше не будет действительным. Вы можете скрыть это, установив пространство имен по умолчанию, как в этом примере:

import pyxb.utils.domutils
pyxb.utils.domutils.BindingDOMSupport.SetDefaultNamespace(test.Namespace)
Другие вопросы по тегам