2016-05-04 2 views
2

Я новичок в jsonix и заинтересован в основном использовании его для разметки XML-данных. Я написал очень простой пример теста, но был неудачным, чтобы заставить его работать.Попытка понять, почему простой jsonix unmarshalling терпит неудачу

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; 

Я жестко запрограммировал простой элемент, который имеет пространство имен и содержит «hello» для тестового xml. Меня интересовало «отображение любого элемента» для универсального unmarshalling. Я чувствую, что у меня правильно настроено пространство имен и т. Д. При создании контекста, но я продолжаю получать следующую ошибку: Элемент [sos: Capabilities] не может быть отменен, так как в этом контексте не известно, и свойство не разрешает содержимое DOM. Мысли? и спасибо заранее.

ответ

2

Отказ от ответственности: Я являюсь автором Jsonix.

Здесь есть две проблемы.

Во-первых, вам не хватает xmlns:sos="http://www.opengis.net/sos/2.0" в вашем XML.

Во-вторых, в настоящее время вам необходимо определить имя элемента как объекта с 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);