2017-07-12 8 views
0

予想されるXML形式は以下の通りである:Jsonix - コレクションを作成し、プロパティ宣言に2つ以上の要素を宣言できますか?

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

<a:condition>との両方がXML要求によって必要な数を有することができ、両方としてcollectionにする必要がある<operator>。以下のように

EDITEDType:elementsコード:

{{ 
    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' 
      }] 
     }], 
     elementInfos: [{ 
      elementName: 'root', 
      typeInfo: 'MyModule.ElementsType' 
     }] 
    }; 
    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' 
     }, 
    //Marshalling - not working.... 
     value: { 
     //'c:condition': ['one', 2, 'unmra', 'four', 10,4] 
      'c:condition': [ 
       ['Field','Test'],9 
      ] 
     } 
    }); 
    console.log(marshalled);     
}} 

elementsは私の要件を満たすことができると同じように編集が見えます。アンマーシャリングも機能します。今私はJson形式からマーシャリングする方法を理解する必要があります。アドバイスをいただければ幸いです。

答えて

0

これが問題に私のソリューションです:

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

は完了します!ありがとう@エクセルコア、あなたのガイドは大きな助けでした!

0

あなたが望む通りに正確ではありません。

プロパティは、elementsまたはelementReferencesプロパティを使用して、アイテムと異なる要素を含むコレクションプロパティを宣言できます。ような何か:

{ 
    type: 'elementRefs', 
    name: 'acondition', 
    collection: true, 
    elementTypeInfos: [{ 
     elementName: 'condition', 
     typeInfo: 'DOXML.Atomicon' 
    }, { 
     elementName: 'operator', 
     typeInfo: 'String' 
    }] 
} 

このプロパティは、conditionまたはoperator任意の数量または順序をインを含んでいるでしょう。しかし、これはあなたがそれらの数が同じであること、または常にconditionに続いてoperatorが続くことを保証するものではありません。これが望ましい場合はconditionalOperatorのような要素にconditionoperatorの組をラップすることを検討してください。

+0

ありがとうございました。あなたのガイドは素晴らしかったです!私は '要素'を使うことにしました。私は自分の質問を編集しました。今、JsonをXMLにマーシャリングするための正しいJsonフォーマットに問題があります。 – codingKit

+0

これは別の質問です。 – lexicore

関連する問題