JAVA对XML多层次解析

Java读取多层级xml文件 最近在做国际客服北京职场的项目,需要提供一个接口服务端的能力,也就是需要开发一个http+xml的协议,入参和出参均为Map格式,各系统间的请求或应答是以xml格式封装的。在将返回报文(xml)解析为Map输出时遇到一个难点:Java对于多层级xml的解析。现以一个客户资料查询接口为例将解析过程记录如下: 返回xml报文的简化形式: 阅读详情

JAVA对XML多层次解析

之前需要对XML文件进行读取,在网上查询相关资料的时候查询到的结果都是层次比较低的,无法满足要求,在深入思考之后,实现的对多层次的XML文件进行读取,过程如下:

假设XML文件结构内容如下(采用SP800-53中规定的密钥状态为例)

<states>
    <state>
        <name>Not Exist</name>
        <id>0</id>
        <summary>Object that hasn't been created</summary>
        <next_state>
            <state_id>1</state_id>
        </next_state>
    </state>
    <state>
        <name>Pre-Active</name>
        <id>1</id>
        <summary>state before active</summary>
        <next_state>
            <state_id>2</state_id>
            <state_id>4</state_id>
            <state_id>5</state_id>
        </next_state>
    </state>
    <state>
        <name>Active</name>
        <id>2</id>
        <summary>this is state of active</summary>
        <next_state>
            <state_id>3</state_id>
            <state_id>4</state_id>
        </next_state>
    </state>
    <state>
        <name>Deactived</name>
        <id>3</id>
        <summary>state of deactived</summary>
        <next_state>
            <state_id>4</state_id>
            <state_id>5</state_id>
        </next_state>
    </state>
    <state>
        <name>Compromised</name>
        <id>4</id>
        <summary>state of compromised</summary>
        <next_state>
            <state_id>6</state_id>
        </next_state>
    </state>
    <state>
        <name>Destroyed</name>
        <id>5</id>
        <summary>object in this state cannot be used anymore</summary>
        <next_state>
            <state_id>6</state_id>
        </next_state>
    </state>
    <state>
        <name>Destroy Compromised</name>
        <id>6</id>
        <summary>Last state</summary>
    </state>
</states>

代码如下所示:

package xmldecode;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

public class statedecoder {
    static String filepos = "xmlpos\\state.xml";

    public static void main(String[] args){
        try{
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder();
            Document doc = dbBuilder.parse(filepos);
            NodeList nList = doc.getElementsByTagName("state");
            System.out.println("Length :: " + nList.getLength());
            for(int i = 0; i< nList.getLength() ; i ++){
                Element node = (Element)nList.item(i);
                String namestr = node.getElementsByTagName("name").item(0).getFirstChild().getNodeValue();
                String idstr = node.getElementsByTagName("id").item(0).getFirstChild().getNodeValue();
                String summarystr = node.getElementsByTagName("summary").item(0).getFirstChild().getNodeValue();
                System.out.println(namestr + "\n" + idstr + "\n" + summarystr);

                Element stateelem = (Element) node.getElementsByTagName("next_state").item(0);
                if(stateelem != null){
                    NodeList statelist = stateelem.getElementsByTagName("state_id");
                    for(int j = 0; j < statelist.getLength(); j++){
                        String nextstatestr = statelist.item(j).getFirstChild().getNodeValue();
                        System.out.print(nextstatestr);
                    }
                }
                System.out.println();
                System.out.println();
            }
        }catch (Exception e) {
            System.err.println("ERR :: XML-state decoder error");
            e.printStackTrace();
        }
    }

}

运行结果如下所示:

Length :: 7
Not Exist
0
Object that hasn't been created
1

Pre-Active
1
state before active
245

Active
2
this is state of active
34

Deactived
3
state of deactived
45

Compromised
4
state of compromised
6

Destroyed
5
object in this state cannot be used anymore
6

Destroy Compromised
6
Last state
dom4j解析多层次xml static String ProjectName=""; static String ECType="";         static String ECRNumber=""; static String ECNNumber="";   static String ECNCreatorName=""; static String ECNCreatorCode=""; static Stri 阅读详情

相关推荐

Java解析 XML 及生成XML

1、文档对象模型(Document Object Model,DOM) (tree parser)将读入的XML文档转换为树结构。2、简单API(Simple API for XML SAX) (Stream parser)将读入的XML文档转换为相应的事件。startDocument和endDocument 分别在文档开始和结束时各调用一次。两种解析器比较:如果文档很长,生成树很耗内存,如果不关心上下文,只关心元素,可以使用流。//三种方式获取Document。4、所有属性必须有值,不能为空。

2401_89760128的博客 802

java xml 多层解析_注解+反射+递归动态生成多层XML

1.首先我们先创建一个xml的帮助类,这个帮助类不许要任何属性,需要帮助实体类识别其他的成员实体类,代码如下:注释xml帮助类import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.ann...

weixin_36122809的博客 782

java 解析xml 多级

企业级应用 java 解析多级xml 多么复杂的都可以, 一个类,一个jar 包,非常实用,希望大家顶起..

java xml 多层解析_java xml 解析方式汇总 (一)#高级程序员进阶之路#

1。xml背景格式良好的(web-fromed)xml可以不需要文档类型定义(DTD),只要满足基本的xml格式规范就可以认为是格式良好的xml文档。但是格式标准,只能说明元素、标签、格式是合法的,并不能说明元素是有意义的,或者说规范的。有效的xml文档,首先要求是格式良好的文档,同时遵守相应的DTD文件约束。2。xml解析xml文档解析的大致使用过程如下图:由xml解析器解析和操作指定的xml文...

weixin_30536861的博客 604

潜在图神经网络学习笔记(Latent Graph Neural Networks for Human Skeleton-based Action Recognition)

在本文中,我们从一个新的角度来解决这个问题,通过将非结构化的骨架数据映射到潜在空间,如图2所示,这里称为潜在特征空间或嵌入空间,其中一组项嵌入在一个流形中[ 1 ],并且在潜在空间中彼此更相似的项被放置在彼此更接近的位置。潜在空间中的位置可以被认为是由一组潜在变量定义的,这些潜在变量来源于对象的相似性。将骨架数据嵌入到流形中,消除了远近邻居之间的冗余依赖关系,以解决加权问题。得到具有多尺度聚合特征的稀疏图矩阵结构,以更好地理解骨骼关节的直接加权信息。

qq_45631885的博客 489

低速信号设计之 ESPI 篇

ESPI 是 Intel 推出的增强型串行外设接口,基于 SPI 发展而来,新增 Reset# 和 Alert# 信号,采用点对点主从通信模型,最高速率达 33MHz,支持半双工与 DMA 传输。 其物理接口含 10 条线路,通信协议分物理层、数据链路层等四层。布局布线需关注信号完整性、电源完整性,还得考虑与 SPI 的兼容性。 ESPI 广泛应用于计算机系统(连接 BIOS、电源管理器等)和工业控制领域,具有引脚少、功耗低等优势,但设计复杂且存在兼容性挑战。

qq_16237389的博客 1383

关于c#中解析xml格式多层级使用方法

c#中解析xml格式多层级使用方法

qq_24275649的博客 1672

步进电机选型避雷手册:为什么你的42HS电机总丢步?从相数、电流到散热全面拆解

本文深入剖析了42HS步进电机在高速或重载下易出现丢步问题的根本原因。文章指出,选型时不应仅关注静态保持转矩,而需重点分析动态矩频曲线、合理匹配驱动器电流与细分数、进行准确的机械传动惯量计算,并有效管理系统共振与散热。通过全面拆解这些关键因素,为工程师提供了实用的选型避雷指南与系统优化方案。

weixin_29275257的博客 97

Java 读取多层级循环xml

问题:在项目开发中对接银行接口,由于银行接口使用的技术比较古老,接口返回的数据为xml格式。xml数据多层嵌套存在多个标签循环,类似与java中的List对象集合。下面的方法就是对多相同xml标签进行读取,并转为List对象集合。

记录工作开发中遇到的技术难点,方便自己查看,也希望可以帮助到他人... 2289

微信爬虫服务器,微信文章爬虫使用教程 - 八爪鱼采集器

对于某些用户来说,直接自定义规则可能有难度,所以在这种情况下,我们提供了网页简易模式,网页简易模式下存放了国内一些主流网站爬虫采集规则,在你需要采集相关网站时可以直接调用,节省了制作规则的时间以及精力。微信文章采集下来有很多作用,比如可以将自己行业中最近一个月之内发布的内容采集下来,然后分析文章标题和内容的一个方向与趋势。所以本次介绍八爪鱼简易采集模式下“搜狗公众号”的使用教程以及注意要点。步骤一...

weixin_26712065的博客 3258

Python OpenCV教程从入门到精通的全面指南【文末送书】

全书共分为16章,包括Python与OpenCV、搭建开发环境、图像处理的基本操作、像素的操作、色彩空间与通道、绘制图形和文字、图像的几何变换、图像的阈值处理、图像的运算、模板匹配、滤波器、腐蚀与膨胀、图形检测、视频处理、人脸检测和人脸识别以及MR智能视频打卡系统。主流技术,全面覆盖:本书内容丰富,涵盖了Open CV图像处理技术的方方面面,如图像的几何变换、阈值处理、图像运算、模板匹配、滤波器、腐蚀与膨胀、图形检测、视频处理、人脸检测和人脸识别等。此外,通过对比原图,可更直观地看到图像经过处理后的效果。

一键难忘的博客 9075

Pull和SAX解析XML,以解析中国省市列表为例子

废话不说直接上代码 //地区对象 public class Area { private String aName ; //地区名 private String aCode ; //地区号 public String getaName() { return aName; } public void setaName(String aName) { this.aName = aName; } publ

Liberation的博客 1355

YOLOv12改进策略【卷积层】| SPD-Conv 针对小目标和低分辨率图像的检测任务

SPD-Conv是一种新的 CNN 构建模块,用于替代传统 CNN 架构中使用的步长卷积(strided convolution)和池化(pooling)层,它由空间到深度(Space-to-depth,SPD)层和非步长卷积(non - strided convolution)层组成。

Limiiiing的博客 1779

Java解析xml格式数据或xml文件

本文使用的是dom4j工具解析 1.maven依赖 <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency> <dependency> <groupId>

weixin_42933886的博客 636

基于 STM32 的智慧农业温室控制系统设计与实现

本文提出一种基于 STM32 微控制器的智慧农业温室控制系统设计方案,通过集成多类型环境传感器、执行机构及无线通信模块,实现对温室内温湿度、光照、土壤湿度等参数的实时监测与自动调控。文中详细阐述硬件选型、电路连接及软件实现流程,并附关键代码示例,为智慧农业领域提供低成本、高可靠性的温室控制解决方案。

weixin_42300449的博客 1923

PCL 贪婪投影三角剖分算法【2025最新版】

本博客在学习PCL中的贪婪投影三角算法的基础上,实现了使用彩色点云重建彩色模型的应用案例。博客长期更新,最近一次更新时间为:2025年7月6日。

点云侠的博客 37万+

Java的xml解析小工具

xml解析小工具(java) 对于java来解析xml文件在许许多多的工具之中都有涉及,比如hibernate就需要用户通过xml来建立表和java对象之间的映射关系,这确实很常用。我们常常把键值对用properties来处理,而有层次结构的往往可以使用xml来进行记录。 下面看一下jdk自带的api是如何解析xml的吧: 这是Student.xml文件在src目录下 &lt;hzy&gt; ...

h1311454244的博客 3378

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java-创建和解析XML文件(之)使用Dom4j

重点 :使用到了包dom4j.jar http://download.youkuaiyun.com/detail/male09/9868245 开始创建XML文件: 思路: 1.查看当前是否有文件可写 2.插件XML文件 3.写入XML文件数据 用到的导入包: import java.io.File; import java.io.FileWriter;

红叶岭谷的博客 770

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

java利用dom4j对任意xml的解析

最近完成了java对任意对象生成xml,有写了下java对任意一个xml文件的解析,生成主要靠反射原理来完成,而解析则主要是遍历xml树的每个节点,并对每个节点进行处理。刚刚开始我写了个如下的解析文件。 package javaForXML; import java.io.File;import java.util.ArrayList;import java.u...

weixin_30421809的博客 140

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Java解析XML

XML现在已经成为一种通用的数据交换格式,平台的无关性使得很多场合都需要用到XML。本文将详细介绍用Java解析XML的四种方法 在做一般的XML数据交换过程中,我更乐意传递XML字符串,而不是格式化的XML Document。这就涉及到XML字符串和Xml Document的转换问题,说白了这是个很简单的问题,本文就各种XML解析器分别列举如下,以方便自己今后查阅。 =========...

zhen340417593的专栏 4536

Java中的XML解析

以上,我们详细介绍了Java中几种常见的XML解析方式,包括DOM、SAX、StAX和JDOM。DOM解析:适合处理小型XML文件,支持随机访问。SAX解析:适合处理大型XML文件,基于事件驱动,不需要将整个文件加载到内存中。StAX解析:结合了DOM和SAX的优点,按需拉取数据,适合中大型XML文件。JDOM解析:提供了更高层次的API,简化了XML解析的复杂性,适合各种场景。希望通过这篇文章,大家能对Java中的XML解析有一个全面深入的了解。

weixin_46372265的博客 3312

java xml解析器_Java XML解析器

java xml解析器Java XML parser is used to work with xml data. XML is widely used technology to transport or store data. That’s why there are many java xml parsers available. Java XML解析器用于处理xml数据。 XML是广泛用于...

从零开始的教程世界 1110

java解析XML——Pull解析

除了可以使用SAX或DOM解析XML文件之外,在Android中可以使用Android内置的Pull解析器解析XML文件。 Pull解析器是一个开源的java项目,既可以用于android,也可以用于JavaEE。如果用在javaEE需要把其jar文件放入类路径中,因为Android已经集成进了Pull解析器,所以无需添加任何jar文件。android系统本身使用到的各种xml文件,其内部也是采用

u014471160的博客 2413

JAVA中解析XML和书写XML

JAVA中解析XML和书写XML 一.解析XML 1.解析user.xml文档 ​ 解析user.xml文档,使用DOM4J解析XML,将User.xml文档解析后的所有员工入对象中,将对象在存储到集合中。 1.创建自定义User类 ​ 属性包括:id(序号),name(姓名),age(年龄),salay(薪资),gender(性别) public class User { private int id; private String name; private int age; private

weixin_47600732的博客 3373

java xml 解析list_详解Java中的XML解析

详解Java中的XML解析前言XML,全称Extensibible Markup Language, 主要用于数据的保存或者文件传输,其主要特性如下所示:以标签为主的标记语言支持自定义标签,支持自我解释与具体技术无关支持验证方便人类的读写XML示例为了更好的了解XML,下面我们提供一个简单的XML文件,内容如下所示:xuhuanfeng22maleTom23femalLily24femal在XML...

weixin_42513215的博客 1761
上一篇: Java插入数据库乱码的解决方案
下一篇: CCF会议列表——网络与信息安全
forest_open
博客等级 码龄12年 39粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值