RSS简述 及 Java构造RSS接口

RSS

RSS(简易信息聚合)是一种消息来源格式规范,用以聚合经常发布更新数据的网站,例如博客文章、新闻、音频或视频的网摘。RSS文件包含全文或是节录的文字,再加上发布者所订阅之网摘数据和授权的元数据。

资源描述框架站点摘要(RDF Site Summary)就是RSS的英文原意,后来通过逆向首字母缩略词变更为Really Simple Syndication“简易信息聚合”。把新闻标题、摘要(Feed)、内容按照用户的要求,“送”到用户的桌面就是RSS的目的。RSS一词有时候大体上意为社会性书签,包括各种RSS的不同格式。

RSS摘要可以借由RSS阅读器、feed reader 或是 aggregator 等网页或以桌面为架构的软件来阅读。标准的XML档式可允许信息在一次发布后透过不同的程序阅览。用户借由将网摘输入RSS阅读器或是用鼠标点取浏览器上指向订阅程序的RSS小图标之URI(非通常称为URL)来订阅网摘。RSS阅读器定期检阅是否有更新,然后下载给监看用户界面。

RSS可以是以下三种解释中任一种的缩写,但其实这三者都是指同一种联合供稿(Syndication)的技术:

  • RSS 2.0(Really Simple Syndication)
  • RSS 0.91, RSS 1.0(RDF(Resource Description Framework)Site Summary)
  • RSS 0.9 and 1.0(Rich Site Summary)

Java 构造RSS接口

Xml注解

  • @XmlRootElement: 将Java类或枚举类型映射到XML元素
  • @XmlAccessorType(XmlAccessType.FIELD): PROPERTY、FIELD、PUBLIC_MEMBER、NONE
  • @XmlAttribute: 将Java类的一个属性映射到与属性同名的一个XML属性
  • @XmlElement: 将Java类的一个属性映射到与属性同名的一个XML元素
  • @XmlJavaTypeAdapter 使用定制的适配器(即扩展抽象类XmlAdapter并重写marshalunmarshal方法),以序列化Java类为XML

Xml JavaBean

@Data
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "rss")
public class VideoBean {

    @XmlAttribute
    private String version = "2.0";

    @XmlElement(name = "channel")
    private List<VideoBean.Channel> channelList;

    @Data
    @XmlAccessorType(XmlAccessType.FIELD)
    public static class Channel {
        @XmlJavaTypeAdapter(value = CDataAdapter.class)
        private String title;
        @XmlJavaTypeAdapter(value = CDataAdapter.class)
        private String description;
        @XmlJavaTypeAdapter(value = CDataAdapter.class)
        private String link;
        @XmlElement(name = "item")
        private List<VideoBean.Item> itemList;
    }

    @Data
    @XmlAccessorType(XmlAccessType.FIELD)
    public static class Item {
        @XmlJavaTypeAdapter(value = CDataAdapter.class)
        private String title;
        @XmlJavaTypeAdapter(value = CDataAdapter.class)
        private String link;
        @XmlElement(name = "enclosure")
        private Enclosure enclosure;
    }
    
    @Data
    @XmlAccessorType(XmlAccessType.FIELD)
    public static class Enclosure {
        @XmlAttribute
        private String url;
        @XmlAttribute
        private String length;
        @XmlAttribute
        private String type;
    }
}

Xml 工具类

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;

public class XmlUtil {
    public final static String CHARSET_UTF8 = "UTF-8";


    /**
     * java对象转换为xml文件
     * @param obj 泛型对象
     * @param charset 字符编码
     * @param <T> 泛型
     * @return xml文件的String
     * @throws JAXBException
     */
    public static <T> String beanToXml(T obj, String charset) throws JAXBException {
        JAXBContext jc = JAXBContext.newInstance(obj.getClass());
        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.setProperty(Marshaller.JAXB_ENCODING, charset);
        // 1) 隐去报文头的生成, Marshaller.JAXB_FRAGMENT默认为false
        marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
        marshaller.setProperty("com.sun.xml.bind.marshaller.CharacterEscapeHandler", new com.sun.xml.bind.marshaller.CharacterEscapeHandler() {
            @Override
            public void escape(char[] chars, int i, int i1, boolean b, Writer writer) throws IOException {
                writer.write(chars, i, i1);
            }
        });
        StringWriter writer = new StringWriter();
        // 2) 自定义生成
        writer.write("<?xml version=\"1.0\" encoding=\"" + charset + "\" ?>\n");
        marshaller.marshal(obj, writer);
        return writer.toString();
    }

    /**
     * java对象转换为xml文件(UTF-8编码)
     * @param obj 泛型对象
     * @param <T> 泛型
     * @return xml文件的String
     */
    public static <T> String beanToXml(T obj) {
        try {
            return XmlUtil.beanToXml(obj, XmlUtil.CHARSET_UTF8);
        } catch (JAXBException e) {
            e.printStackTrace();
            return null;
        }
    }
}

运行结果示例

<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
    <channel>
        <title>
            <![CDATA[测试]]>
        </title>
        <description>
            <![CDATA[描述]]>
        </description>
        <link>
            <![CDATA[链接url]]>
        </link>
        <item>
            <title>
                <![CDATA[测试]]>
            </title>
            <link>
                <![CDATA[链接url]]>
            </link>
            <enclosure url="http://www.google.com" length="12" type="video/mp4"/>
        </item>
    </channel>
</rss>

参考资料:

  1. RSS
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值