You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何解析含未闭合<br>标签的XML?Jackson XmlMapper解析报错求助

解决Jackson XmlMapper解析未闭合
标签的XML报错问题

问题核心在于第三方返回的XML包含HTML风格的未闭合空标签<br>,而Jackson默认使用的Woodstox解析器严格遵循XML规范,要求空标签必须写成<br/>或带有闭合标签</br>,因此触发解析错误。

解决方法是配置XmlMapper的底层Woodstox输入工厂,开启兼容遗留空元素的选项:

具体代码实现

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.dataformat.xml.XmlFactory;
import com.ctc.wstx.stax.WstxInputFactory;
import java.io.IOException;

public String parser(String sample) throws IOException {
    // 初始化Woodstox输入工厂并开启兼容模式
    WstxInputFactory inputFactory = new WstxInputFactory();
    inputFactory.setProperty(WstxInputFactory.P_ALLOW_LEGACY_EMPTY_ELEMENTS, true);
    
    // 用配置好的输入工厂构建XmlMapper
    XmlMapper mapper = new XmlMapper(new XmlFactory(inputFactory));
    JsonNode node = mapper.readTree(sample);
    
    // 示例:将解析结果转为字符串返回,可根据业务需求调整
    return mapper.writeValueAsString(node);
}

原理说明

P_ALLOW_LEGACY_EMPTY_ELEMENTS是Woodstox提供的配置项,开启后解析器会将<br>这类未闭合的空标签自动视为自闭合标签<br/>处理,从而绕过XML规范的严格检查,成功解析第三方返回的非标准XML数据。

依赖说明

确保项目中已引入Jackson XML解析及Woodstox的相关依赖(以Maven为例):

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
    <version>2.15.2</version> <!-- 使用对应版本 -->
</dependency>
<dependency>
    <groupId>org.codehaus.woodstox</groupId>
    <artifactId>woodstox-core-asl</artifactId>
    <version>4.4.1</version> <!-- 与Jackson版本兼容即可 -->
</dependency>

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

火山引擎 最新活动