strong node example create conversion json node.js soap loopbackjs

node - jabón en el nodo está analizando json a XML incorrecto



strong soap js (1)

Usando el módulo Soap en Nodejs (a través de loopback-connector-soap), estoy tratando de convertir json a xml para mi solicitud de jabón, pero tengo algunos problemas ...

Lo que es:

<ns:UserDefinedFields> <ns:UserDefinedField> <ns:displayName>Campaign?</ns:displayName> <ns:fieldValue>Yes</ns:fieldValue> </ns:UserDefinedField> </ns:UserDefinedFields> <ns:UserDefinedFields> <ns:UserDefinedField> <ns:displayName>Anticipated Use</ns:displayName> <ns:fieldValue>6</ns:fieldValue> </ns:UserDefinedField>

Lo que debería ser:

<ns:UserDefinedFields> <ns:UserDefinedField> <base:displayName>Campaign?</base:displayName> <base:fieldValue>Yes</base:fieldValue> </ns:UserDefinedField> <ns:UserDefinedField> <base:displayName>Anticipated Use</base:displayName> <base:fieldValue>6</base:fieldValue> </ns:UserDefinedField> </ns:UserDefinedFields>

  • Debe ser solo uno <ns:UserDefinedFields>
  • Y debe ser <base:fieldValue> lugar de <ns:fieldValue>

¡Cualquier consejo sería muy útil! ¡Gracias!

El XML:

{ ... "UserDefinedFields": [ { "displayName": "Campaign?", "fieldValue": "Yes" }, { "displayName": "Anticipated Use", "fieldValue": 6 } ] ... }

El XSD:

... <xs:element name="UserDefinedFields" minOccurs="0"> <xs:complexType> <xs:sequence> <xs:element name="UserDefinedField" type="base:UserDefinedFieldType" minOccurs="0" maxOccurs="15"/> </xs:sequence> </xs:complexType> </xs:element> ...


Para tratar con el espacio de nombres, pase los espaciosNombre soap.createClient opciones soap.createClient .

{ "ignoredNamespaces": { namespaces: [''ns''] }, }

Y luego agregue el espacio de nombres manualmente. Es feo, pero funciona.

Para tratar con múltiples UserDefinedFields , debería verse así:

{ . . . DomainRegistration[''ns:UserDefinedFields''][''ns:UserDefinedField''][0] : { "base:displayName": "Campaign?", "base:fieldValue": "Yes" }, DomainRegistration[''ns:UserDefinedFields''][''ns:UserDefinedField''][1] : { "base:displayName": "Anticipated Use", "base:fieldValue": 6 } . . . }

O para decirlo de manera más simple:

{ ouside: { insideA: [ ''one'', ''two'', ] insideB: [ {''one'':''ONE''}, {''two'':''TWO''} ] } } //will create: <outside> <insideA> <one /> <two /> </insideA> <insideB> <one>ONE</one> </insideB> <insideB> <two>TWO</two> </insideB> </outside>