如何解析含未闭合<br>标签的XML?Jackson XmlMapper解析报错求助
解决Jackson XmlMapper解析未闭合
标签的XML报错问题
标签的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




