沫沫金-XML节点解析(List内容)不依赖任何Jar包_JDK原生函数

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介:

大家好,XML解析不依赖任何Jar包的编写模式,关键词:Pattern、Matcher使用。


工具类如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/**
  * Xml工具类
  * @author 章力
  * @微信 zl4828
  */
public  class  XmlUtil {
 
     /**
      * 从消息message中提取出指定的tagName节点,包括他得子节点.
      *
      * @param xmlMessage
      * @param tagName
      * @return
      * @throws Exception
      */
     public  static  String pareXml(String xmlMessage, String tagName)
     {
         String regex =  ".*?(<" +tagName+ ">.*?</" +tagName+ ">)|(<" +tagName+ "/>)" ;
         Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);
         Matcher matcher = pattern.matcher(xmlMessage);
 
         if  (matcher.find())
         {
             xmlMessage = matcher.group( 1 );
             return  xmlMessage;
         }
         else
         {
             throw  new  RuntimeException( "无法提取xml消息体.tagName = "  + tagName);
         }
     }
 
     /**
      * 从消息message中提取出指定的tagName节点中间的内容
      *
      * @param xmlMessage
      * @param tagName
      * @return
      * @throws Exception
      */
     public  static  String pareXmlContent(String xmlMessage, String tagName)
     {
         String regex =  "\\<"  + tagName +  ">(.*?)\\</"  + tagName +  ">" ;
         Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);
         Matcher matcher = pattern.matcher(xmlMessage);
         if  (matcher.find())
         {
             xmlMessage = matcher.group( 1 );
             return  xmlMessage;
         }
         else
         {
             throw  new  RuntimeException( "无法提取xml消息体.tagName = "  + tagName);
         }
     }
     
     /**
      * 返回匹配到的所有节点
      *
      * @param xmlMessage
      * @param tagName
      * @return
      * @throws Exception
      */
     public  static  Matcher pareXmlMatcher(String xmlMessage, String tagName)
     {
         String regex =  ".*?(<" +tagName+ ">.*?</" +tagName+ ">)|(<" +tagName+ "/>)" ;
         Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);
         Matcher matcher = pattern.matcher(xmlMessage);
         return  matcher;
     }
}

使用实例

1
2
3
4
5
6
7
         /**
          * 解析返回的XML,沫沫金提供支持微信@zl4828
          */
         Matcher matcher = XmlUtil.pareXmlMatcher(resultXml,  "Result" );
         while  (matcher.find()) {
             System.out.println(XmlUtil.pareXmlContent(matcher.group(), "hosName" ));
        }

示例XML内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<? xml  version = "1.0"  encoding = "UTF-8" ?> < Response >< MessageHeader >
   < code >0</ code >
   < desc >成功</ desc >
</ MessageHeader >< List >
   < Result >
     < hosOrgCode >43523202X61010311A1001</ hosOrgCode >
     < hosName >西安市第九医院</ hosName >
     < hospitalAdd >沫沫金</ hospitalAdd >
     < hospitalRule ></ hospitalRule >
     < hospitalWeb ></ hospitalWeb >
     < trafficGuide ></ trafficGuide >
     < hospitalDesc >专注网页设计、Web前端工程</ hospitalDesc >
     < hospitalTel >微信:zl4828</ hospitalTel >
     < hospitalGrade ></ hospitalGrade >
     < payMode >|3|</ payMode >
     < orderMode >|2|</ orderMode >
     < isSpTime >1</ isSpTime >
   </ Result >
   < Result >
     < hosOrgCode >43720037161011311A5211</ hosOrgCode >
     < hosName >西安市第八医院</ hosName >
     < hospitalAdd ></ hospitalAdd >
     < hospitalRule ></ hospitalRule >
     < hospitalWeb ></ hospitalWeb >
     < trafficGuide ></ trafficGuide >
     < hospitalDesc >网络营销</ hospitalDesc >
     < hospitalTel >15319419526</ hospitalTel >
     < hospitalGrade >1</ hospitalGrade >
     < payMode >|3|</ payMode >
     < orderMode >|2|</ orderMode >
     < isSpTime >1</ isSpTime >
   </ Result >
</ List ></ Response >



总结:不想千篇一律,以上是你尝鲜的动力。




本文转自 沫沫金 51CTO博客,原文链接:http://blog.51cto.com/zl0828/1717160,如需转载请自行联系原作者


目录
打赏
0
0
0
0
265
分享
相关文章
|
5月前
|
深入解析:JDK与JVM的区别及联系
在Java开发和运行环境中,JDK(Java Development Kit)和JVM(Java Virtual Machine)是两个核心概念,它们在Java程序的开发、编译和运行过程中扮演着不同的角色。本文将深入解析JDK与JVM的区别及其内在联系,为Java开发者提供清晰的技术干货。
89 1
AOP中的JDK动态代理与CGLIB动态代理:深度解析与实战模拟
【11月更文挑战第21天】面向切面编程(AOP,Aspect-Oriented Programming)是一种编程范式,它通过将横切关注点(cross-cutting concerns)与业务逻辑分离,以提高代码的可维护性和可重用性。在Java开发中,AOP的实现离不开动态代理技术,其中JDK动态代理和CGLIB动态代理是两种常用的方式。本文将从背景、历史、功能点、业务场景、底层逻辑等多个维度,深度解析这两种代理方式的区别,并通过Java示例进行模拟和比较。
284 5
原生鸿蒙应用市场开发者服务的技术解析:从集成到应用发布的完整体验
原生鸿蒙应用市场开发者服务的技术解析:从集成到应用发布的完整体验
【编程基础知识】Eclipse连接MySQL 8.0时的JDK版本和驱动问题全解析
本文详细解析了在使用Eclipse连接MySQL 8.0时常见的JDK版本不兼容、驱动类错误和时区设置问题,并提供了清晰的解决方案。通过正确配置JDK版本、选择合适的驱动类和设置时区,确保Java应用能够顺利连接MySQL 8.0。
554 1
|
6月前
|
查看并解析当前jdk的垃圾收集器
本文介绍了如何查看和解析当前JDK使用的垃圾收集器,通过在IDEA中配置JVM选项并运行示例代码来展示G1垃圾回收器的详细信息和命令行标志。
76 0
查看并解析当前jdk的垃圾收集器
云原生技术解析:从IO出发,以阿里云原生为例
【10月更文挑战第24天】随着互联网技术的不断发展,传统的单体应用架构逐渐暴露出扩展性差、迭代速度慢等问题。为了应对这些挑战,云原生技术应运而生。云原生是一种利用云计算的优势,以更灵活、可扩展和可靠的方式构建和部署应用程序的方法。它强调以容器、微服务、自动化和持续交付为核心,旨在提高开发效率、增强系统的灵活性和可维护性。阿里云作为国内领先的云服务商,在云原生领域有着深厚的积累和实践。
143 0
|
7月前
|
bat启动jar包时,如何设置jdk
【9月更文挑战第3天】bat启动jar包时,如何设置jdk
497 5
|
7月前
|
Python量化炒股的获取数据函数— get_billboard_list()
Python量化炒股的获取数据函数— get_billboard_list()
96 0
xml介绍与解析,及xml库包使用
xml介绍与解析,及xml库包使用
82 0
DataWorks操作报错合集之在使用函数holiday_date遇到报错: “Perhaps you forgot to add it to using list when create funciton.,是什么原因
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。

热门文章

最新文章

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等