You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 22:10:28