如何使用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
相关产品推荐
相关产品推荐

