Java教程

java解析xml

本文主要是介绍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>

这篇关于java解析xml的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!