2015-06-24 14 views
14

Sử dụng mô-đun Xà phòng trong Nodejs (thông qua loopback-connector-soap), tôi đang cố chuyển đổi json thành xml cho yêu cầu xà phòng của mình, nhưng tôi có một vài vấn đề ...xà phòng trên nút đang phân tích cú pháp json thành xml sai

gì nó là:

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

gì nó nên là:

<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> 
  • nên chỉ có một <ns:UserDefinedFields>
  • Và nên <base:fieldValue> thay vì <ns:fieldValue>

Lời khuyên nào sẽ siêu hữu ích! Cảm ơn!

XML:

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

Các 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

Có lẽ một vấn đề với thư viện. Hãy thử tạo một vấn đề trên trang github và/hoặc sử dụng một thư viện xml2json khác. –

+0

Có thể không nên là ''. Những gì bạn gọi là "XML" trông giống như JSON. –

+0

Có thể bạn chỉ nhầm lẫn ** tiền tố ** với ** không gian tên **. Nếu tiền tố 'ns' trong XML của bạn trỏ đến cùng một không gian tên như' base' trong XSD của bạn, mọi thứ đều ổn. Câu hỏi không chứa đủ thông tin để phán xét về điều này. Vui lòng thêm các phần 'xmlns: ns =' và 'xmlns: base ='. –

Trả lời

1

Để đối phó với không gian tên, vượt qua ignoredNamespaces các soap.createClient tùy chọn.

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

Sau đó thêm không gian tên theo cách thủ công. Nó xấu xí, nhưng nó hoạt động.

Để đối phó với nhiều UserDefinedFields, nó sẽ giống như thế này:

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

Hoặc để đặt nó đơn giản hơn:

{ 
    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> 
Các vấn đề liên quan