我是jsonix的新手,并且主要使用它来解组xml数据。我写了一个非常基本的测试示例,但是没有成功使它工作。
var MyModule = {
name: 'MyModule',
typeInfos: [{
type: 'classInfo',
localName: 'AnyElementType',
propertyInfos: [{
type: 'anyElement',
allowDom: true,
allowTypedObject:true,
name: 'any',
collection: false
}]
}],
elementInfos: [{
elementName: 'sos:Capabilities',
typeInfo: 'MyModule.AnyElementType'
}]
};
var context = new Jsonix.Context([MyModule], {namespacePrefixes: {'http://www.opengis.net/sos/2.0':'sos'}});
var unmarshaller = context.createUnmarshaller();
var data = unmarshaller.unmarshalString('<sos:Capabilities version=\"2.0.0\">hello</sos:Capabilities>');
return data;
我硬编码了一个具有命名空间的简单元素,并为测试xml包含“hello”。我对通用解组的“任何元素映射”感兴趣。我觉得在创建上下文时我已经适当地配置了命名空间等但是我一直收到以下错误: 元素[sos:Capabilities]无法解组,因为在此上下文中未知,并且该属性不允许DOM内容。思考?并提前感谢。
答案 0 :(得分:2)
免责声明:我是Jsonix的作者。
这里有两个问题。
首先,您在XML中缺少 def traits_view(self):
style_sheet = '''
QLineEdit { background: yellow }
'''
return QtView(
Item('object.name'),
Item('object.age'),
style_sheet=style_sheet)
。
其次,目前您需要将元素名称定义为具有xmlns:sos="http://www.opengis.net/sos/2.0"
和namespaceURI
的对象。如果你只使用字符串,Jsonix将使用localPart
(这里没有定义)。 defaultElementNamespaceURI
当前未在namespacePrefixes
中应用elementInfos
选项。这将是一个很好的功能,如果你想要这个,请file an issue。
这是一个working JSFiddle与你的模块。
var MyModule = {
name: 'MyModule',
typeInfos: [{
type: 'classInfo',
localName: 'AnyElementType',
propertyInfos: [{
type: 'anyElement',
allowDom: true,
allowTypedObject: true,
name: 'any',
collection: false
}]
}],
elementInfos: [{
elementName: {
namespaceURI: 'http://www.opengis.net/sos/2.0',
localPart: 'Capabilities'
},
// 'sos:Capabilities',
typeInfo: 'MyModule.AnyElementType'
}]
};
var context = new Jsonix.Context([MyModule], {
namespacePrefixes: {
'http://www.opengis.net/sos/2.0': 'sos'
}
});
var unmarshaller = context.createUnmarshaller();
var data = unmarshaller.unmarshalString('<sos:Capabilities version=\"2.0.0\" xmlns:sos=\"http://www.opengis.net/sos/2.0\">hello</sos:Capabilities>');
console.log(data);