You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将含重复节点名的XML请求转换为JSON请求(适配node soap)

转换XML请求为node-soap兼容的JSON格式

先把你的原始XML结构补全(从给出的片段能看出重复节点的规律):

原始可正常运行的XML请求示例:

<EformData>
  <EformFields>
    <FieldName>txt_customername</FieldName>
    <FieldValue>Scott</FieldValue>
  </EformFields>
  <EformFields>
    <FieldName>txt_organisation</FieldName>
    <FieldValue>My Organisation</FieldValue>
  </EformFields>
  <!-- 其他EformFields节点遵循相同结构 -->
</EformData>

要让node-soap正确把JSON转换成对应的XML,核心要点是:XML中的重复节点(比如多个<EformFields>)在JSON里必须用数组表示。下面是你需要的JSON结构:

const soapRequestData = {
  EformData: {
    EformFields: [
      {
        FieldName: 'txt_customername',
        FieldValue: 'Scott'
      },
      {
        FieldName: 'txt_organisation',
        FieldValue: 'My Organisation'
      }
      // 在这里添加更多字段对象,保持{ FieldName, FieldValue }的结构即可
    ]
  }
};

为什么这么写?

  • Node-soap会自动把JSON数组映射为重复的XML元素,如果不用数组,只会生成单个<EformFields>节点,直接导致请求失效。
  • 数组里的每个对象完全对应一个<EformFields>节点,字段名和XML标签严格一致,转换过程不会出问题。
  • 你可以直接把这个JSON传给node-soap的方法调用,比如:
    client.yourTargetWebServiceMethod(soapRequestData, (err, result) => {
      // 在这里处理响应或错误
    });
    

额外提示:如果有XML属性怎么办?

如果你的<EformData>或子节点带有XML属性(比如<EformData requestId="1001">),可以用$键在JSON里定义属性:

EformData: {
  $: { requestId: '1001' }, // XML属性放在这里
  EformFields: [...]
}

内容的提问来源于stack exchange,提问作者Scott

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:10:40