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 处理变得更加简单和高效。