2015-06-24 47 views
14

在Nodejs中使用Soap模塊(通過loopback-connector-soap),我試圖將json轉換爲xml作爲我的soap請求,但是我遇到了一些問題......肥皂節點上解析json到xml錯誤

它是什麼:

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

它應該是什麼:

<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> 
  • 應該只有一個<ns:UserDefinedFields>
  • 並應<base:fieldValue>而不是<ns:fieldValue>

任何意見將是超級有用!謝謝!

的XML:

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

的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> 
... 
+0

可能的問題與庫。嘗試在github頁面上創建問題並/或使用其他xml2json庫。 –

+0

它可能不應該是''。你所說的「XML」看起來像JSON。 –

+0

也許你只是將​​*前綴**與**命名空間**混淆。如果XML中的前綴「ns」在XSD中指向與「base」相同的名稱空間,則一切正常。這個問題沒有足夠的信息來判斷這一點。請添加'xmlns:ns ='和'xmlns:base ='部分。 –

回答

1

要對付的命名空間,通過ignoredNamespaces的soap.createClient選項。

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

然後手動添加名稱空間。這是醜陋的,但它的工作原理。

處理多個UserDefinedFields,它應該是這樣的:

{ 
    . . . 
    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 
    } 
    . . . 
} 

或者把它更簡單:

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