如何用XmlMapper解析含无标签匿名字段类XML文件的最后一行?
解决方案
要解析文件末尾无标签的URL,你可以通过以下步骤处理:
1. 调整数据模型,捕获文档级文本
由于原文件在根节点<movie>之外存在文本内容(URL),需要创建一个顶层类包裹原有模型,并通过注解捕获根节点外的文本:
@ToString @Getter @Setter public class MovieDocument { // 映射<movie>根节点,关闭自动包装 @JacksonXmlElementWrapper(useWrapping = false) private NfoFileXmlModel movie; // 捕获根节点外的所有文本内容 @JacksonXmlText private String extraText; }
同时更新原NfoFileXmlModel,补充缺失的genre字段(对应XML中的<genre>标签):
@ToString @Getter @Setter public class NfoFileXmlModel { @ToString @Getter @Setter public static class Art { String poster; } Art art; String year; String title; String genre; // 新增字段,映射<genre>标签 }
2. 修改解析逻辑,提取URL
使用顶层类MovieDocument读取文件,再从extraText中清理并提取URL:
XmlMapper mapper = new XmlMapper(); mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); try { MovieDocument document = mapper.readValue(nfoFile.toFile(), MovieDocument.class); NfoFileXmlModel xmlFileContent = document.getMovie(); // 清理文本中的换行、空格,得到纯净的IMDB URL String imdbUrl = document.getExtraText().trim(); } catch (JsonParseException e) { log.debug("Failed to deserialize {} ({})", nfoFile, e.toString()); }
原理说明
@JacksonXmlElementWrapper(useWrapping = false):避免Jackson自动为<movie>节点添加额外包装层,确保直接映射到movie字段。@JacksonXmlText:专门用于捕获当前节点下的纯文本内容,这里用来捕获根节点<movie>之外的URL文本。
内容的提问来源于stack exchange,提问作者kerner1000
相关产品推荐
相关产品推荐

