java解析xml

工具类

/**
     * 将xml解析为指定对象
     *
     * @param clazz 相关的类
     * @param <T> 转化后的类
     * @return
     */
    public static <T> T parseXmlToBean(String url, Class[] clazz, Class<T> target) throws Exception {
        XStream xs = new XStream(new DomDriver("UTF-8"));
        //忽略object中没有的标签
        xs.ignoreUnknownElements();
        //所有相关的object
        xs.processAnnotations(clazz);
        //类型转换
        xs.registerConverter(new XmlDateConverter());
        xs.autodetectAnnotations(true);

        //过滤掉特殊符号:官方定义了XML的无效字符分为三段(0x00 - 0x08、0x0b - 0x0c、0x0e - 0x1f)
        StringBuilder result = HttpClientUtils.doGet(url);
        if (StringUtils.isNotBlank(result)) {
            return (T) xs.fromXML(result.toString().replaceAll("[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f]", ""));
        }

        return null;
    }

调用的方式:

RssXml rssXml = XmlUtil.parseXmlToBean(zhuanlan.getRssAddress(),
        new Class[]{RssXml.class, RssXmlChannel.class, RssXmlItem.class}, RssXml.class);
相关的类:
@Setter
@Getter
@XStreamAlias("rss")
public class RssXml {

    @XStreamAlias("channel")
    private RssXmlChannel channel;

}


@Setter
@Getter
@XStreamAlias("channel")
public class RssXmlChannel{

    /**
     * 标题
     */
    @XStreamAlias("title")
    private String title;

    
    /**
     * 内容
     */
    @XStreamImplicit(itemFieldName = "item")
    private List<RssXmlItem> item;

}


@Setter
@Getter
@XStreamAlias("item")
public class RssXmlItem {

    /**
     * 标题
     */
    private String title;

    /**
     * 内容
     */
    @XStreamAlias("content:encoded")
    private String content;

    /**
     * 发行时间
     */
    @XStreamConverter(value = XmlDateConverter.class)
    private Date pubDate;


    /**
     * 附件
     */
    private XmlEnclosure enclosure;

    /**
     * 图片地址
     */
    @XStreamAlias("itunes:image")
    private XmlImage image;

    /**
     * 图片信息
     */
    @Getter
    @Setter
    @XStreamAlias("itunes:image")
    public class XmlImage {
        @XStreamAsAttribute
        String href;//标签的属性
    }

    /**
     * 附件信息
     */
    @Getter
    @Setter
    @XStreamAlias("enclosure")
    public class XmlEnclosure {
        //标签的属性
        @XStreamAsAttribute
        private String url;

        @XStreamAsAttribute
        private String type;

        @XStreamAsAttribute
        private int length;
    }

}
日期转化方法

/**
 * 转换RSS的xml时间类型
 *
 */
public class XmlDateConverter extends AbstractSingleValueConverter {

    @Override
    public boolean canConvert(Class type) {
        return type.equals(Date.class);
    }

    @Override
    public Date fromString(String str) {
        // 这里将字符串转换成日期
        try {
            if (StringUtils.isBlank(str)) {
                return new Date();
            }

            return new Date(str);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}
相关jar包:
 <dependency>
        <groupId>com.thoughtworks.xstream</groupId>
        <artifactId>xstream</artifactId>
        <version>1.4.16</version>
 </dependency>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值