当前位置: 首页 > news >正文

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

相关文章:

  • Scribe: 一个非常方便的操作文档编写工具
  • Linux file 命令详解
  • L1-7、Prompt 的“调试技巧”
  • 文件操作和IO(上)
  • L1-6、Prompt 与上下文的关系[特殊字符]
  • metasploit(2)生成dll木马
  • 基于 Spring Boot实现的图书管理系统
  • 龙虎榜——20250422
  • PyTorch与自然语言处理:从零构建基于LSTM的词性标注器
  • JavaScript的JSON处理Map的弊端
  • Spring Boot 应用优雅关闭
  • FLV 与 MP4 格式深度剖析:结构、原理
  • 【前端】【业务场景】【面试】在网页开发中,如何优化图片以提高页面加载速度?解决不同设备屏幕适配问题
  • 进阶篇 1:超越基准 - 指数平滑 (ETS) 模型详解
  • http通信之axios vs fecth该如何选择?
  • kubernetes》》k8s》》删除命名空间
  • element-ui cascader 组件源码分享
  • Redis—为何持久化使用子进程
  • dify工作流之text-2-e-sql,大模型写sql并执行
  • 《 C++ 点滴漫谈: 三十四 》从重复到泛型,C++ 函数模板的诞生之路
  • 体坛联播|AC米兰挺进意大利杯决赛,弗雷戴特宣布退役
  • 人民日报整版聚焦第十个“中国航天日”:星辰大海,再启新程
  • 灰鹦鹉爆粗口三年未改?云南野生动物园:在持续引导
  • 美国国务院:鲁比奥将不参加在伦敦举行的乌克兰问题会谈
  • 陈冬评价神二十乘组:合,三头六臂;分,独当一面
  • 坚守17年,这件事姚明就算赔钱也在继续做