首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用PyXB或JaXB删除‘PyXB’前缀?

如何用PyXB或JaXB删除‘PyXB’前缀?
EN

Stack Overflow用户
提问于 2016-11-01 14:12:19
回答 1查看 868关注 0票数 0

从这个xsd文件:

代码语言:javascript
复制
<?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:

代码语言:javascript
复制
<?xml version="1.0" ?>
<Foo xmlns="http://foo.org/FooIsNotBar">hello</Foo>

所以我做了这个:

代码语言:javascript
复制
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

不幸的是,我得到了一个带有不需要的ns1前缀的XML:

代码语言:javascript
复制
<?xml version="1.0" ?>
<ns1:Foo xmlns:ns1="http://foo.org/FooIsNotBar">Hello World</ns1:Foo>

我想去掉这些ns1:前缀。多么?

编辑

这个关于jaxb的问题给了我一些提示,但是我还没有找到我的问题的解决方案。

我发现可以使用test.Namespace.setPrefix('foo')设置前缀。不幸的是,我无法隐藏前缀。

一个肮脏的解决办法是这样做:

代码语言:javascript
复制
import test
rmp = 'REMOVE_ME_PLEASE'
test.Namesapce.setPrefix(rmp)
print test.Foo('Hello World').toxml().replace(rmp + ':', '').replace(':' + rmp, '')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-04 20:26:16

您不能仅仅删除前缀,因为XML将不再有效。可以通过设置默认名称空间(如这个例子中的名称空间)来隐藏

代码语言:javascript
复制
import pyxb.utils.domutils
pyxb.utils.domutils.BindingDOMSupport.SetDefaultNamespace(test.Namespace)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40361823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档