Collections Jsonix—是否可以创建一个集合并在属性声明中声明2个或更多元素?
预期的XML格式如下所示:Collections Jsonix—是否可以创建一个集合并在属性声明中声明2个或更多元素?,collections,elements,jsonix,Collections,Elements,Jsonix,预期的XML格式如下所示: <c:condition> <a:condition> <fieldname>fieldName</fieldname> <fieldtest>fieldTest</fieldtest> <fieldvalues> <fieldvalue>fieldValue</fieldvalue>
<c:condition>
<a:condition>
<fieldname>fieldName</fieldname>
<fieldtest>fieldTest</fieldtest>
<fieldvalues>
<fieldvalue>fieldValue</fieldvalue>
</fieldvalues>
</a:condition>
<operator>operator</operator>
<a:condition>
...<some>
</a:condition>
</c:condition>
编辑的看起来
元素
可以满足我的要求。解组也有效。现在我只需要找出如何从Json格式整理它。如果您有任何建议,我们将不胜感激但并非完全如您所愿
您可以使用或属性来声明集合属性,该集合属性将包含作为项的不同元素。比如:
{
type: 'elementRefs',
name: 'acondition',
collection: true,
elementTypeInfos: [{
elementName: 'condition',
typeInfo: 'DOXML.Atomicon'
}, {
elementName: 'operator',
typeInfo: 'String'
}]
}
此属性将在任何数量或订单中包含
条件
或运算符
。但这并不能保证它们的数量相同,也不能保证它们总是在条件
后面跟着运算符
。如果这是你想要的,考虑包装<代码>条件> /COD>和<代码>运算符< /代码>对元素,如<代码>条件运算符< /代码> .< /p> < p>这是我对问题的解决方案:
var MyModule = {
name: 'MyModule',
typeInfos: [{
type: 'classInfo',
localName: 'ElementsType',
propertyInfos: [{
type: 'elements',
name: 'c:condition',
wrapperElementName: {
localPart: 'condition',
namespaceURI: 'http://us.xomplex',
prefix: 'c'
},
collection: true,
elementTypeInfos: [{
elementName: {
localPart: 'condition',
namespaceURI: 'http://us.xomplexio',
prefix: 'a'
},
typeInfo: 'MyModule.SubAtomic'
}, {
elementName: 'operator',
typeInfo: 'String'
}]
}]
},
{
type: 'classInfo',
localName: 'SubAtomic',
propertyInfos:[{
type: 'element',
name: 'fieldName',
elementName: 'fieldName',
typeInfo: 'String'
},
{
type: 'element',
name: 'fieldTest',
elementName: 'fieldTest',
typeInfo: 'String'
},
{
type: 'element',
name: 'fieldValues',
elementName: 'fieldValues',
typeInfo: 'MyModule.SubSubAtoms'
}]
},
{
type: 'classInfo',
localName: 'SubSubAtoms',
propertyInfos:[
{
type: 'element',
name: 'fieldValue',
collection: true,
elementName: 'fieldValue',
typeInfo: 'String'
}
]
}
],
elementInfos: [{
elementName: 'root',
typeInfo: 'MyModule.ElementsType',
},
{
elementName: 'atoms',
typeInfo:'MyModule.SubAtomic'
}
]
};
console.log("creating unmarsaller");
var context = new Jsonix.Context([MyModule]);
var unmarshaller = context.createUnmarshaller();
var unmarshalled = unmarshaller.unmarshalString('<root><c:condition xmlns:c="http://us.xomplex"><a:condition xmlns:a="http://us.xomplexio">one</a:condition><operator>2</operator><a:condition xmlns:a="http://us.xomplexio"><fieldName>unmra</fieldName><fieldTest>Beneed</fieldTest></a:condition><a:condition xmlns:a="http://us.xomplexio">four</a:condition><operator>AND</operator><operator>4</operator></c:condition></root>');
console.log("unmarshalled");
console.log(unmarshalled);
var marshaller = context.createMarshaller();
var marshalled = marshaller.marshalString({
name: {
localPart: 'root'
},
value: {
'c:condition': [
"9",
{ name:
{
localPart: 'atoms'
},
fieldName: "rating",
fieldTest: "equals",
fieldValues: {
fieldValue: ["563"]
} ,
TYPE_NAME: 'MyModule.SubAtomic'
},
"AND",
{ name:
{
localPart: 'atoms'
},
fieldName: "price",
fieldTest: "between",
fieldValues: {
fieldValue: ["150", "300"]
} ,
TYPE_NAME: 'MyModule.SubAtomic'
}] //end of c:condition value
}
});
console.log(marshalled);
var MyModule={
名称:“MyModule”,
类型信息:[{
键入:“classInfo”,
localName:'ElementsType',
房地产公司:[{
类型:'元素',
名称:“c:条件”,
wrapperElementName:{
localPart:'条件',
namespaceURI:'http://us.xomplex',
前缀:“c”
},
收藏:没错,
元素类型信息:[{
元素名称:{
localPart:'条件',
namespaceURI:'http://us.xomplexio',
前缀:“a”
},
typeInfo:'MyModule.SubAtomic'
}, {
elementName:'运算符',
typeInfo:'字符串'
}]
}]
},
{
键入:“classInfo”,
localName:'亚原子',
房地产公司:[{
类型:'元素',
名称:'fieldName',
elementName:'字段名',
typeInfo:'字符串'
},
{
类型:'元素',
名称:“现场测试”,
elementName:“现场测试”,
typeInfo:'字符串'
},
{
类型:'元素',
名称:'fieldValues',
elementName:'字段值',
typeInfo:'MyModule.subsubsubtoms'
}]
},
{
键入:“classInfo”,
localName:'子原子',
房地产公司:[
{
类型:'元素',
名称:“fieldValue”,
收藏:没错,
elementName:'fieldValue',
typeInfo:'字符串'
}
]
}
],
元素信息:[{
elementName:'根',
typeInfo:'MyModule.ElementsType',
},
{
elementName:'原子',
typeInfo:'MyModule.SubAtomic'
}
]
};
log(“创建反汇编程序”);
var context=newjsonix.context([MyModule]);
var unmarshaller=context.createUnmarshaller();
var unmarshalled=unmarshaller.unmarshalString('one2unmraBeneedfourAND4');
console.log(“解封”);
console.log(未签名);
var marshaller=context.createMarshaller();
var marshalled=marshaller.marshallString({
姓名:{
localPart:'根'
},
价值:{
“c:条件”:[
"9",
{名称:
{
localPart:“原子”
},
字段名:“评级”,
现场测试:“等于”,
字段值:{
字段值:[“563”]
} ,
键入名称:“MyModule.SubAtomic”
},
“和”,
{名称:
{
localPart:“原子”
},
字段名:“价格”,
现场测试:“之间”,
字段值:{
字段值:[“150”,“300”]
} ,
键入名称:“MyModule.SubAtomic”
}]//c的结尾:条件值
}
});
控制台日志(编组);
完成了!谢谢你@lexicore,你的导游帮了大忙 谢谢。你的向导很棒!我决定使用
元素
。我编辑了我的问题。现在,我遇到了将Json封送到XML的正确Json格式的问题。这是另一个问题。
var MyModule = {
name: 'MyModule',
typeInfos: [{
type: 'classInfo',
localName: 'ElementsType',
propertyInfos: [{
type: 'elements',
name: 'c:condition',
wrapperElementName: {
localPart: 'condition',
namespaceURI: 'http://us.xomplex',
prefix: 'c'
},
collection: true,
elementTypeInfos: [{
elementName: {
localPart: 'condition',
namespaceURI: 'http://us.xomplexio',
prefix: 'a'
},
typeInfo: 'MyModule.SubAtomic'
}, {
elementName: 'operator',
typeInfo: 'String'
}]
}]
},
{
type: 'classInfo',
localName: 'SubAtomic',
propertyInfos:[{
type: 'element',
name: 'fieldName',
elementName: 'fieldName',
typeInfo: 'String'
},
{
type: 'element',
name: 'fieldTest',
elementName: 'fieldTest',
typeInfo: 'String'
},
{
type: 'element',
name: 'fieldValues',
elementName: 'fieldValues',
typeInfo: 'MyModule.SubSubAtoms'
}]
},
{
type: 'classInfo',
localName: 'SubSubAtoms',
propertyInfos:[
{
type: 'element',
name: 'fieldValue',
collection: true,
elementName: 'fieldValue',
typeInfo: 'String'
}
]
}
],
elementInfos: [{
elementName: 'root',
typeInfo: 'MyModule.ElementsType',
},
{
elementName: 'atoms',
typeInfo:'MyModule.SubAtomic'
}
]
};
console.log("creating unmarsaller");
var context = new Jsonix.Context([MyModule]);
var unmarshaller = context.createUnmarshaller();
var unmarshalled = unmarshaller.unmarshalString('<root><c:condition xmlns:c="http://us.xomplex"><a:condition xmlns:a="http://us.xomplexio">one</a:condition><operator>2</operator><a:condition xmlns:a="http://us.xomplexio"><fieldName>unmra</fieldName><fieldTest>Beneed</fieldTest></a:condition><a:condition xmlns:a="http://us.xomplexio">four</a:condition><operator>AND</operator><operator>4</operator></c:condition></root>');
console.log("unmarshalled");
console.log(unmarshalled);
var marshaller = context.createMarshaller();
var marshalled = marshaller.marshalString({
name: {
localPart: 'root'
},
value: {
'c:condition': [
"9",
{ name:
{
localPart: 'atoms'
},
fieldName: "rating",
fieldTest: "equals",
fieldValues: {
fieldValue: ["563"]
} ,
TYPE_NAME: 'MyModule.SubAtomic'
},
"AND",
{ name:
{
localPart: 'atoms'
},
fieldName: "price",
fieldTest: "between",
fieldValues: {
fieldValue: ["150", "300"]
} ,
TYPE_NAME: 'MyModule.SubAtomic'
}] //end of c:condition value
}
});
console.log(marshalled);