ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java解析xml

2021-10-19 16:00:37  阅读:127  来源: 互联网

标签:xml XStreamAlias java String private public return 解析 class


工具类

/**
     * 将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>

标签:xml,XStreamAlias,java,String,private,public,return,解析,class
来源: https://blog.csdn.net/H785503444/article/details/120847820

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有