Staxon转换XML至JSON时被分隔的同类型元素未合并为数组的问题咨询
核心结论
不存在直接调整现有JsonXMLConfig参数即可实现跨打断点数组合并的原生配置,需要基于Staxon的流式事件模型做通用化逻辑适配,完全可以满足你支撑海量异构XML转换、不做单场景定制的约束。
问题根因
- Staxon的
autoArray机制仅识别同一父节点下连续出现的同标签序列为数组,一旦连续序列被其他不同名称的标签打断,后续再次出现的同标签会触发默认的JSON同名键覆盖逻辑,不会自动和之前被打断的数组合并。 - 你当前启用的
autoArray(true)、autoPrimitive(true)两个配置,仅控制自动数组触发规则、原始文本自动类型转换的基础行为,没有提供跨打断点数组合并的内置开关,无法靠调整现有配置直接实现目标。
通用适配方案
以下两个方案均不需要针对特定XML结构、特定标签名做硬编码hack,适配任意结构的异构XML输入:
方案1:前置轻量流式节点重排
- 保持原有Staxon配置完全不变,在XML解析流程接入Staxon之前,增加一层轻量的SAX事件处理层:
- 不修改任何节点的属性、文本、嵌套结构,仅在单个父节点的解析生命周期内,按原有文档顺序收集所有同名称的子标签
- 等当前父节点解析完成时,严格按照原始文档顺序,将同名称子标签调整为连续排列后,再交给Staxon走原有解析流程
- 该方案不需要构建完整的XML文档树,内存开销极低,Staxon的
autoArray会自然识别到连续的同标签序列,生成包含全量元素的单个数组,完全匹配期望的转换效果。
方案2:自定义JSON写入的同名键合并逻辑
- 基于Staxon的事件驱动模型,替换默认的JSON值写入处理器:
- 当写入器检测到当前待写入的键已经在JSON对象中存在、且原键对应的值为数组类型时,不执行覆盖操作,而是将新值追加到原有数组的末尾
- 该方案无需修改XML解析链路,无论同标签节点被多少其他类型标签打断,都会自动追加到对应的同键数组中,最终实现“同名称子标签统一归为一个数组、包含全量元素”的转换效果。
内容的提问来源于stack exchange,提问作者TergOfSky
相关产品推荐
相关产品推荐

