Retrofit 2 如何解析sitemap xml接口/文件

位置:首页>文章>详情   分类: 教程分享 > Java教程   阅读(944)   2023-03-28 11:29:14
       学习使用Retrofit 2在Android应用程序中解析sitemap (sitemap),使用简单的xml转换器依赖项进行xml解析

       在此示例中,我们将阅读并解析此博客的sitemap 。下面给出了一个示例条目:
$title(Sitemap)
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <url>
        <loc>https://leftso.com/retrofit2/retrofit-sync-async-calls/</loc>
        <lastmod>2019-08-25T22:22:39+00:00</lastmod>
        <changefreq>monthly</changefreq>
        <priority>0.8</priority>
    </url>
    ...
    ...
</urlset>

1.依赖性

为了能够在android中解析sitemap ,我们至少需要两个依赖项,即retrofitconverter-simplexml
$title(build.gradle)
dependencies {
    compile 'com.squareup.retrofit2:retrofit:2.6.1'
    compile 'com.squareup.retrofit2:converter-simplexml:2.6.1'
}
$title(pom.xml)
<dependency>
    <groupId>com.squareup.retrofit2</groupId>
    <artifactId>retrofit</artifactId>
    <version>2.6.1</version>
</dependency>
<dependency>
    <groupId>com.squareup.retrofit2</groupId>
    <artifactId>converter-simplexml</artifactId>
    <version>2.6.1</version>
</dependency>

2.sitemap 模型

首先创建用于使用sitemap 条目项的模型。
$title(SitemapResponse.java)
import java.util.ArrayList;
import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Root;
 
@Root(name = "urlset")
public class SitemapResponse
{
    @ElementList(name = "url", inline = true)
    private ArrayList<SitemapEntry> url;
 
    @Override
    public String toString() {
        return "SitemapResponse [urlset=" + url + "]";
    }
}
$title(SitemapEntry.java)
import org.simpleframework.xml.Element;
import org.simpleframework.xml.Root;
 
@Root(name="url")
public class SitemapEntry
{
    @Element(name="loc")
    private String loc;
     
    @Element(name="lastmod")
    private String lastmod;
     
    @Element(name="changefreq")
    private String changefreq;
     
    @Element(name="priority")
    private float priority;
     
    @Override
    public String toString() {
        return "SitemapEntry [loc=" + loc + ", lastmod=" + lastmod + ",
                changefreq=" + changefreq + ", priority=" + priority
                + "]";
    }
}

3.sitemap 服务接口

创建服务接口,将通过改造来调用以执行HTTP请求。请注意API URL是sitemap.xml
$title(SitemapService.java)
import retrofit2.Call;
import retrofit2.http.GET;
 
public interface SitemapService
{
    @GET("sitemap.xml") Call<SitemapResponse> getFeed();
}

4.读取sitemap 示例

让我们创建一个改造实例并执行sitemap 请求。给定示例使用异步请求示例。
$title(SitemapServiceDemo.java)
import java.io.IOException;
 
import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.simplexml.SimpleXmlConverterFactory;
 
public class SitemapServiceDemo
{
    private static final String BASE_URL = "https://leftso.com/";
 
    private static Retrofit.Builder builder = new Retrofit.Builder().baseUrl(BASE_URL)
            .addConverterFactory(SimpleXmlConverterFactory.create());
 
    private static HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor()
            .setLevel(HttpLoggingInterceptor.Level.BODY);
 
    private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
 
    public static void main(String[] args) throws IOException
    {
        httpClient.addInterceptor(loggingInterceptor);
        builder.client(httpClient.build());
 
        Retrofit retrofit = builder.build();
 
        SitemapService SitemapService = retrofit.create(SitemapService.class);
 
        Call<SitemapResponse> callAsync = SitemapService.getFeed();
 
        callAsync.enqueue(new Callback<SitemapResponse>() {
            @Override
            public void onResponse(Call<SitemapResponse> call, Response<SitemapResponse> response) {
                if (response.isSuccessful()) {
                    SitemapResponse apiResponse = response.body();
                    // API response
                    System.out.println(apiResponse);
                } else {
                    System.out.println("Request Error :: " + response.errorBody());
                }
            }
 
            @Override
            public void onFailure(Call<SitemapResponse> call, Throwable t) {
                if (call.isCanceled()) {
                    System.out.println("Call was cancelled forcefully");
                } else {
                    System.out.println("Network Error :: " + t.getLocalizedMessage());
                }
            }
        });
    }
}
程序输出。
$title(Console)
SitemapResponse [urlset=
        [SitemapEntry [loc=https://leftso.com/
                    retrofit2/retrofit-sync-async-calls/,
        lastmod=2019-08-25T22:22:39+00:00,
        changefreq=monthly,
        priority=0.8].
        ...
        ...
        ...
标签: Retrofit 2
地址:https://www.leftso.com/article/671.html

相关阅读

       学习使用Retrofit 2在Android应用程序中解析sitemap (sitemap),使用简单的xml转换器依赖项进行xml解析
       Retrofit 2 通过使用@Query和@Path注解来处理单个,多个甚至可选的查询参数和路径参数请求 1.查询参数 Retrofit使用@Query注释来定义请求的查询参数
前言       在本教程中,我们将了解Retrofit 的基础知识以和创建一个android HTTP client请求REST API
首先了解下Retrofit.Builder得作用,Retrofit.Builder类使用Builder API来定义HTTP操作的URL端点,最后构建一个新Retrofit实例请记住,baseU...
环境说明 dockerdocker-composemysql 5.7nacos 2.2.3 docker-compose 配置
HTTP协议2.0,HTTP 2.0如何升级_HTTP2.0新特性_HTTP2.0详解。
Spring Boot 2.0 Redis整合,通过spring boot 2.0整合Redis作为spring缓存框架的实现。
从Spring 6和Spring Boot 3开始,与OpenFeign和Retrofit等其他声明式客户端类似,Spring框架支持以Java接口的形式创建RSocket服务,并为RSocke...
这个Log4j2示例将帮助您使用HTMLLayout配置log4j2.xml文件
本文主要翻译spring官方的基于spring security框架的oauth2开发指南,spring,oauth2,spring框架,Java编程