fast-xml-parser解析带命名空间XML转JS对象失败如何解决
解决方案
你当前解析异常是因为目标XML包含多组命名空间前缀、内置Schema元数据,默认配置无法正确提取业务节点,通过调整fast-xml-parser的解析参数即可解决,无需额外hack。
1. 调整解析配置
调用parse方法时传入以下配置项,完整代码示例:
import { parse } from 'fast-xml-parser'; // 你的fetch逻辑 return fetch(url) .then((response) => response.text()) .then((text) => { // 自定义解析配置 const parserOptions = { removeNSPrefix: true, // 移除所有命名空间前缀,比如diffgr:、xs: ignoreAttributes: true, // 忽略不需要的节点属性(如diffgr:id等元数据) parseTagValue: true, // 自动转换节点值类型(数字会自动从字符串转成number类型) trimValues: true, // 自动清除节点值前后的空白字符 }; const obj = parse(text, parserOptions); // 提取目标字段,单条数据场景 const targetData = obj.DataSet.diffgram.NewDataSet.ContentSearchIndex; // 如需兼容多条返回,可判断是否为数组再遍历取值 const { Pos, Content_Id, Title } = targetData; return { Pos, Content_Id, Title }; });
2. 配置说明
removeNSPrefix: true会自动把diffgr:diffgram、xs:schema这类带命名空间前缀的节点名处理成不带前缀的diffgram、schema,无需手动适配前缀规则ignoreAttributes: true直接过滤掉所有节点上的元属性,避免冗余数据干扰业务字段提取parseTagValue: true会自动把Pos、Content_Id这类数字类型的字段值从字符串转为Number类型,省去手动转换步骤- 如果接口可能返回多条
ContentSearchIndex数据,解析后obj.DataSet.diffgram.NewDataSet.ContentSearchIndex会是数组格式,按需遍历取值即可。
内容的提问来源于stack exchange,提问作者Nats
相关产品推荐
相关产品推荐

