试图理解为什么简单的 jsonix 解组失败
Trying to understand why simple jsonix unmarshalling is failing
我是 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'。我对用于通用解组的 'any element mapping' 很感兴趣。我觉得在创建上下文时我已经正确配置了命名空间等,但我不断收到以下错误:
元素 [sos:Capabilities] 无法解组,因为在此上下文中未知,并且 属性 不允许 DOM 内容。想法?提前致谢。
免责声明:我是Jsonix的作者。
这里有两个问题。
首先,您的 XML 中缺少 xmlns:sos="http://www.opengis.net/sos/2.0"
。
其次,目前您需要将元素名称定义为具有 namespaceURI
和 localPart
的对象。如果你只是使用字符串,Jsonix 将使用 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);
我是 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'。我对用于通用解组的 'any element mapping' 很感兴趣。我觉得在创建上下文时我已经正确配置了命名空间等,但我不断收到以下错误: 元素 [sos:Capabilities] 无法解组,因为在此上下文中未知,并且 属性 不允许 DOM 内容。想法?提前致谢。
免责声明:我是Jsonix的作者。
这里有两个问题。
首先,您的 XML 中缺少 xmlns:sos="http://www.opengis.net/sos/2.0"
。
其次,目前您需要将元素名称定义为具有 namespaceURI
和 localPart
的对象。如果你只是使用字符串,Jsonix 将使用 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);