如何使用 PyXB 或 JaXB 删除 'ns1' 前缀?
How to remove 'ns1' prefix with PyXB or 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 的 question 给了我一些提示,但是,我还没有找到解决我的问题的方法。
我发现我可以使用 test.Namespace.setPrefix('foo')
设置我的前缀。不幸的是我无法隐藏前缀。
一个肮脏的解决方案是这样做:
import test
rmp = 'REMOVE_ME_PLEASE'
test.Namesapce.setPrefix(rmp)
print test.Foo('Hello World').toxml().replace(rmp + ':', '').replace(':' + rmp, '')
您不能只删除前缀,因为 XML 将不再有效。您可以通过设置默认名称空间来隐藏它,如 this example:
import pyxb.utils.domutils
pyxb.utils.domutils.BindingDOMSupport.SetDefaultNamespace(test.Namespace)
来自这个 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 的 question 给了我一些提示,但是,我还没有找到解决我的问题的方法。
我发现我可以使用 test.Namespace.setPrefix('foo')
设置我的前缀。不幸的是我无法隐藏前缀。
一个肮脏的解决方案是这样做:
import test
rmp = 'REMOVE_ME_PLEASE'
test.Namesapce.setPrefix(rmp)
print test.Foo('Hello World').toxml().replace(rmp + ':', '').replace(':' + rmp, '')
您不能只删除前缀,因为 XML 将不再有效。您可以通过设置默认名称空间来隐藏它,如 this example:
import pyxb.utils.domutils
pyxb.utils.domutils.BindingDOMSupport.SetDefaultNamespace(test.Namespace)