我对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内容。有什么想法?提前谢谢。
发布于 2016-05-05 19:17:34
免责声明:,我是Jsonix的作者。
这里有两个问题。
首先,您在XML中缺少了xmlns:sos="http://www.opengis.net/sos/2.0"。
其次,当前需要将元素名定义为具有namespaceURI和localPart的对象。如果您只使用字符串,Jsonix将使用defaultElementNamespaceURI (这里没有定义)。namespacePrefixes选项目前不在elementInfos中应用。这将是一个很好的功能,如果您想要这个,请提出问题。
这是一个带有模块的工作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);https://stackoverflow.com/questions/37033419
复制相似问题