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

简介: 大家好,XML解析不依赖任何Jar包的编写模式,关键词:Pattern、Matcher使用。工具类如下/** * Xml工具类 * @author 章力 * @微信 zl4828 */public class XmlUtil { /**     * 从消息message中提取出指定的tagName节点,包括他得子节点.

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


工具类如下

/**
 * 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;
    }
}

使用实例

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

示例XML内容

<?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>



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


作者:沫沫金@zl4828微信号

目录
相关文章
|
6月前
|
安全 Oracle Java
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
503 0
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
|
Java 编译器 API
深入解析:JDK与JVM的区别及联系
在Java开发和运行环境中,JDK(Java Development Kit)和JVM(Java Virtual Machine)是两个核心概念,它们在Java程序的开发、编译和运行过程中扮演着不同的角色。本文将深入解析JDK与JVM的区别及其内在联系,为Java开发者提供清晰的技术干货。
330 1
|
安全 Java 开发者
AOP中的JDK动态代理与CGLIB动态代理:深度解析与实战模拟
【11月更文挑战第21天】面向切面编程(AOP,Aspect-Oriented Programming)是一种编程范式,它通过将横切关注点(cross-cutting concerns)与业务逻辑分离,以提高代码的可维护性和可重用性。在Java开发中,AOP的实现离不开动态代理技术,其中JDK动态代理和CGLIB动态代理是两种常用的方式。本文将从背景、历史、功能点、业务场景、底层逻辑等多个维度,深度解析这两种代理方式的区别,并通过Java示例进行模拟和比较。
952 5
|
Java 关系型数据库 MySQL
【编程基础知识】Eclipse连接MySQL 8.0时的JDK版本和驱动问题全解析
本文详细解析了在使用Eclipse连接MySQL 8.0时常见的JDK版本不兼容、驱动类错误和时区设置问题,并提供了清晰的解决方案。通过正确配置JDK版本、选择合适的驱动类和设置时区,确保Java应用能够顺利连接MySQL 8.0。
1144 1
|
Java
让星星⭐月亮告诉你,jdk1.8 Java函数式编程示例:Lambda函数/方法引用/4种内建函数式接口(功能性-/消费型/供给型/断言型)
本示例展示了Java中函数式接口的使用,包括自定义和内置的函数式接口。通过方法引用,实现对字符串操作如转换大写、数值转换等,并演示了Function、Consumer、Supplier及Predicate四种主要内置函数式接口的应用。
157 1
|
缓存 Java 索引
查看并解析当前jdk的垃圾收集器
本文介绍了如何查看和解析当前JDK使用的垃圾收集器,通过在IDEA中配置JVM选项并运行示例代码来展示G1垃圾回收器的详细信息和命令行标志。
252 0
查看并解析当前jdk的垃圾收集器
|
Java Windows
bat启动jar包时,如何设置jdk
【9月更文挑战第3天】bat启动jar包时,如何设置jdk
1300 5
|
11月前
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
1105 29
|
11月前
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
467 4
|
11月前
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

热门文章

最新文章

推荐镜像

更多
  • DNS