2016-05-04 12 views
2

私はjsonixを初めて使い、xmlデータのアンマーシャリングに主に興味があります。私は非常に基本的なテストの例を書いていますが、動作させるのに失敗しています。なぜ簡単なjsonixアンマーシャリングが失敗しているのか理解しようとしています

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コンテンツを許可しません。思考?事前に感謝します。

答えて

2

免責事項:私はJsonixの著者です。

ここには2つの問題があります。

まず、XMLにxmlns:sos="http://www.opengis.net/sos/2.0"がありません。

第2に、現在、要素名をnamespaceURIlocalPartのオブジェクトとして定義する必要があります。 stringを使用するだけの場合、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); 
関連する問題