将含重复节点名的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
相关产品推荐
相关产品推荐

