Java 中 XML 处理工具类详解

在 Java 开发中,处理 XML 数据是一个常见的需求。无论是与外部系统进行数据交互,还是在内部进行数据存储和传输,XML 都扮演着重要的角色。本文将详细介绍一个名为 XmlUtils 的工具类,它提供了 XML 解析和去除 CDATA 标签的功能。

工具类概述

parseXml 和 removeCdata。这两个方法可以帮助我们更方便地处理 XML 数据。

代码示例

java

import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.ylink.health.his.dto.MdmDoctorDto;

public class XmlUtils {

    /**
     * 将 XML 字符串解析为 Java 对象
     *
     * @param xml XML 字符串
     * @param clazz 目标 Java 类
     * @return 解析后的 Java 对象
     */
    public static <T> T parseXml(String xml, Class<T> clazz) {
        try {
            XmlMapper xmlMapper = new XmlMapper();
            return xmlMapper.readValue(xml, clazz);
        } catch (Exception e) {
            throw new RuntimeException("Failed to parse XML", e);
        }
    }

    /**
     * 去除 XML 中的 CDATA 标签
     *
     * @param xml XML 字符串
     * @return 去除 CDATA 后的 XML 字符串
     */
    public static String removeCdata(String xml) {
        return xml.replace("<![CDATA[", "<root>").replace("]]>", "</root>");
    }

    public static void main(String[] args) {
        String xml = "<![CDATA[<MBBZ>0</MBBZ><ZZRS>0</ZZRS><GPXZ>N</GPXZ><WYCFBZ>0</WYCFBZ><DLCG>0</DLCG><MRGYS>00010</MRGYS><JCL>0</JCL><SSKS>607</SSKS><BM>11625</BM><DM>999900730421</DM><YPDM>11625</YPDM><YPLX>0</YPLX><SXM>null</SXM><DMMC>注射用头孢唑肟钠</DMMC><PYM>ZSYTBZWN</PYM><WBM>ITEUBKEQ</WBM><GG>1.0g</GG><BZDW>19</BZDW><BZSL>1</BZSL><FZDW>19</FZDW><JX>65</JX><YYTJ>32</YYTJ><CCTJ>0</CCTJ><YDBZ>0</YDBZ><MZBZ>0</MZBZ><JSBZ>0</JSBZ><FSBZ>0</FSBZ><GZBZ>0</GZBZ><SCLY>1</SCLY><SCCJ>1953</SCCJ><PWJJ>0</PWJJ><PZWH>国药准字H20065460</PZWH><GFBZ>1</GFBZ><BZ>1</BZ><BLJLS>1</BLJLS><BLJLDW>g</BLJLDW><BLCFS>1</BLCFS><FZDW_ONE>19</FZDW_ONE><FZDW_ONE_MC>支</FZDW_ONE_MC><CFYY>1</CFYY><TYDJ>1</TYDJ><FFJJ>null</FFJJ><YYSM>null</YYSM><MZSFLB>02</MZSFLB><LSJ>9.73</LSJ><XQBJ>521</XQBJ><YBLX>2</YBLX><YBBM>100180</YBBM><ZFBL>0</ZFBL><CD>null</CD><BZLSJ>9.73</BZLSJ><CYBZ>0</CYBZ><PDDM>N</PDDM><MRJL>1</MRJL><PSBZ>1</PSBZ><YBFL>0</YBFL><YBSCBZ>1</YBSCBZ><ZBBZ>2</ZBBZ><SPLSH>103791</SPLSH><ZYKL>0</ZYKL><JBYW>0</JBYW><NHYP>1</NHYP><KSS>2</KSS><DDDCFS>1.5</DDDCFS><DDDJL>4</DDDJL><DDDCFDW>null</DDDCFDW><BLFB>27</BLFB><GJSYP>0</GJSYP><JGDM>67</JGDM><FZYP>0</FZYP><DJBZ>0</DJBZ><YBM>11625</YBM><NDB>0.0</NDB><JSLX>N</JSLX><XFJBZ>0</XFJBZ><BZJHJ>9.73</BZJHJ>]]>";
        String cleanedXml = XmlUtils.removeCdata(xml);
        System.out.println("Cleaned XML: " + cleanedXml);

        MdmDoctorDto mdmDoctorDto = XmlUtils.parseXml(cleanedXml, MdmDoctorDto.class);
        System.out.println("Medicine Name: " + mdmDoctorDto.getDmmc());
    }
}

方法详解

parseXml 方法

java

public static <T> T parseXml(String xml, Class<T> clazz) {
    try {
        XmlMapper xmlMapper = new XmlMapper();
        return xmlMapper.readValue(xml, clazz);
    } catch (Exception e) {
        throw new RuntimeException("Failed to parse XML", e);
    }
}

  • 功能:将 XML 字符串解析为指定类型的 Java 对象。
  • 参数
    • xml:要解析的 XML 字符串。
    • clazz:目标 Java 类的 Class 对象。
  • 实现细节
    • 使用 Jackson 库的 XmlMapper 类来完成 XML 到 Java 对象的转换。
    • 如果解析过程中出现异常,将抛出 RuntimeException

removeCdata 方法

java

public static String removeCdata(String xml) {
    return xml.replace("<![CDATA[", "<root>").replace("]]>", "</root>");
}

  • 功能:去除 XML 字符串中的 CDATA 标签。
  • 参数
    • xml:包含 CDATA 标签的 XML 字符串。
  • 实现细节
    • 使用 String 类的 replace 方法将 <![CDATA[ 替换为 <root>,将 ]]> 替换为 </root>

测试代码

java

public static void main(String[] args) {
    String xml = "<![CDATA[<MBBZ>0</MBBZ><ZZRS>0</ZZRS><GPXZ>N</GPXZ><WYCFBZ>0</WYCFBZ><DLCG>0</DLCG><MRGYS>00010</MRGYS><JCL>0</JCL><SSKS>607</SSKS><BM>11625</BM><DM>999900730421</DM><YPDM>11625</YPDM><YPLX>0</YPLX><SXM>null</SXM><DMMC>注射用头孢唑肟钠</DMMC><PYM>ZSYTBZWN</PYM><WBM>ITEUBKEQ</WBM><GG>1.0g</GG><BZDW>19</BZDW><BZSL>1</BZSL><FZDW>19</FZDW><JX>65</JX><YYTJ>32</YYTJ><CCTJ>0</CCTJ><YDBZ>0</YDBZ><MZBZ>0</MZBZ><JSBZ>0</JSBZ><FSBZ>0</FSBZ><GZBZ>0</GZBZ><SCLY>1</SCLY><SCCJ>1953</SCCJ><PWJJ>0</PWJJ><PZWH>国药准字H20065460</PZWH><GFBZ>1</GFBZ><BZ>1</BZ><BLJLS>1</BLJLS><BLJLDW>g</BLJLDW><BLCFS>1</BLCFS><FZDW_ONE>19</FZDW_ONE><FZDW_ONE_MC>支</FZDW_ONE_MC><CFYY>1</CFYY><TYDJ>1</TYDJ><FFJJ>null</FFJJ><YYSM>null</YYSM><MZSFLB>02</MZSFLB><LSJ>9.73</LSJ><XQBJ>521</XQBJ><YBLX>2</YBLX><YBBM>100180</YBBM><ZFBL>0</ZFBL><CD>null</CD><BZLSJ>9.73</BZLSJ><CYBZ>0</CYBZ><PDDM>N</PDDM><MRJL>1</MRJL><PSBZ>1</PSBZ><YBFL>0</YBFL><YBSCBZ>1</YBSCBZ><ZBBZ>2</ZBBZ><SPLSH>103791</SPLSH><ZYKL>0</ZYKL><JBYW>0</JBYW><NHYP>1</NHYP><KSS>2</KSS><DDDCFS>1.5</DDDCFS><DDDJL>4</DDDJL><DDDCFDW>null</DDDCFDW><BLFB>27</BLFB><GJSYP>0</GJSYP><JGDM>67</JGDM><FZYP>0</FZYP><DJBZ>0</DJBZ><YBM>11625</YBM><NDB>0.0</NDB><JSLX>N</JSLX><XFJBZ>0</XFJBZ><BZJHJ>9.73</BZJHJ>]]>";
    String cleanedXml = XmlUtils.removeCdata(xml);
    System.out.println("Cleaned XML: " + cleanedXml);

    MdmDoctorDto mdmDoctorDto = XmlUtils.parseXml(cleanedXml, MdmDoctorDto.class);
    System.out.println("Medicine Name: " + mdmDoctorDto.getDmmc());
}

  • 功能:测试 XmlUtils 类的两个方法。
  • 实现细节
    • 定义一个包含 CDATA 标签的 XML 字符串。
    • 调用 removeCdata 方法去除 CDATA 标签。
    • 调用 parseXml 方法将处理后的 XML 字符串解析为 MdmDoctorDto 对象。
    • 打印处理后的 XML 字符串和药品名称。

总结

通过 XmlUtils 工具类,我们可以方便地处理 XML 数据,包括去除 CDATA 标签和将 XML 字符串解析为 Java 对象。这种封装方式提高了代码的复用性和可维护性,使得 XML 处理变得更加简单和高效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值