Collections Jsonix—是否可以创建一个集合并在属性声明中声明2个或更多元素?

Collections Jsonix—是否可以创建一个集合并在属性声明中声明2个或更多元素?,collections,elements,jsonix,Collections,Elements,Jsonix,预期的XML格式如下所示: <c:condition> <a:condition> <fieldname>fieldName</fieldname> <fieldtest>fieldTest</fieldtest> <fieldvalues> <fieldvalue>fieldValue</fieldvalue>

预期的XML格式如下所示:

<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);