React使用axios与XMLParser将XML转为指定结构JSON数组
你拿到的每个Event节点的children数组中已经包含了需要的Date、Description字段数据,只需对原始解析结果做一层映射转换即可得到目标结构,修改后的代码如下:
await axios .get(XMLData, { // 原代码请求头配置位置错误,需放在headers字段下 headers: { "Content-Type": "application/xml; charset=utf-8", } }) .then((response) => { const xmlDoc = new XMLParser().parseFromString(response.data); const rawEventList = xmlDoc.getElementsByTagName("Event"); // 转换为仅包含Date、Description的对象数组 const formattedEventList = rawEventList.map(eventNode => { const targetEvent = {}; // 遍历子节点匹配所需字段 eventNode.children.forEach(childNode => { if (['Date', 'Description'].includes(childNode.name)) { targetEvent[childNode.name] = childNode.value; } }); return targetEvent; }); // setState为异步操作,需在回调函数中获取更新后的状态 this.setState({ Event: formattedEventList }, () => { console.log("格式化后的数据", this.state.Event); }); });
如果你的XML结构固定,Event节点下的子节点永远是Date在前、Description在后,也可以用更简洁的索引取值写法:
const formattedEventList = rawEventList.map(eventNode => ({ Date: eventNode.children[0].value, Description: eventNode.children[1].value }))
该写法性能更高但兼容性弱,若后续XML结构变动、子节点顺序调整会导致取值错误,推荐优先使用按节点名称匹配的写法。
内容的提问来源于stack exchange,提问作者user788448
相关产品推荐
相关产品推荐

