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

如何使用Retrofit和SimpleXML解析网站XML及处理CDATA内img/div标签

解决Retrofit+SimpleXML解析CDATA中HTML标签的问题

嘿,我之前也踩过SimpleXML处理CDATA里HTML标签的坑,给你几个实用的解决方案:

1. 让SimpleXML保留CDATA原始内容

默认情况下SimpleXML可能会把CDATA里的HTML标签当成普通文本甚至过滤掉,首先要确保它原封不动返回完整内容。你只需要给实体类的description字段加上两个注解:

@Element(name = "description")
@Text(required = false, data = true)
private String description;

这里的@Text(data = true)是关键,它会告诉SimpleXML不要解析CDATA里的标签,直接把整个片段作为字符串返回。这样你就能拿到包含<img>和<div>的完整内容了。

2. 用Jsoup解析提取目标内容

拿到原始的HTML字符串后,如果你想单独提取图片链接或者<div>里的文本,用Jsoup来处理最方便:

// 假设你已经通过Retrofit拿到了实体类对象
String descriptionHtml = yourEntity.getDescription();

// 用Jsoup解析HTML片段
Document doc = Jsoup.parse(descriptionHtml);

// 提取img的src属性
Element imgElement = doc.selectFirst("img");
String imgSrc = imgElement != null ? imgElement.attr("src") : "";

// 提取div里的文本内容
String divContent = doc.selectFirst("div").text();

这样就能轻松分离出你需要的图片链接和文本啦。

3. 检查Retrofit的SimpleXML配置

确保你的Retrofit实例是正确使用SimpleXmlConverterFactory创建的,没有额外的过滤配置:

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("你的基础URL")
    .addConverterFactory(SimpleXmlConverterFactory.create())
    .build();

如果需要更灵活的解析规则,还可以自定义Serializer来调整SimpleXML的行为:

Serializer customSerializer = new Persister(new AnnotationStrategy());
SimpleXmlConverterFactory factory = SimpleXmlConverterFactory.create(customSerializer);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:58:00