Java 解析XML数据
实例一:获取指定两个标签之间的数据
XML数据格式:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetAlarmTypeResponse xmlns="YKITSJLW">
<GetAlarmTypeResult>报警,断电,调校,超量程,分站故障,不巡检,暂停,传感器故障</GetAlarmTypeResult>
</GetAlarmTypeResponse>
</soap:Body>
</soap:Envelope>
目的:获取<GetAlarmTypeResult>和</GetAlarmTypeResult> 之间的数据
方法一:
package yk.bigdata.dl.ias.fileParse; import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import yk.bigdata.dl.ias.bean.BeanAlarmType; import java.io.ByteArrayInputStream;
import java.util.ArrayList;
import java.util.List; /**
* @Author: cjj
* @Date: Created in 11:09 2019/7/9
* @Description:
*/
public class AlarmTypeXmlFileParse {
public static dom4jXml(String interfaceData) throws Exception{
List<Element> elementList = null; SAXReader sr = new SAXReader();
Document document = sr.read(new ByteArrayInputStream(interfaceData.getBytes())); // 传入需要解析的数据
Element root = document.getRootElement();
elementList = root.elements();
for (Element e : elementList) {
// 解析标签下一级标签
Element e1 = e.element("GetAlarmTypeResponse");
List<Element> elementList1 = e1.elements();
for (Element el:elementList1){
System.out.println(e1.elementText("GetAlarmTypeResult"));
}
}
}
}
方法二:
// 获取指定标签的index
int indexbegin = xmlStr.indexOf("<GetAlarmTypeResult>");
int indexend = xmlStr.indexOf("</GetAlarmTypeResult>");
System.out.println("<TrmSeqNum>的位置===" + indexbegin);
System.out.println("</TrmSeqNum>的位置===" + indexend);
// 截取指定index之间的数据
String jsonStr = xmlStr.substring(indexbegin + 25, indexend);
System.out.println(jsonStr);
实例二:获取指定标签下的所有子标签的值
XML数据格式:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetTagValueJsonResponse xmlns="YKITSJLW">
<GetTagValueJsonResult>
<Table diffgr:id="Table1" msdata:rowOrder="0">
<AlarmState>调校</AlarmState>
<TagKey>YK03112034112</TagKey>
<TagName>1611运顺回风流CO</TagName>
<Value>0</Value>
<AlarmTime>2019-06-01T13:44:35.477+08:00</AlarmTime>
<AlarmRtnTime>2019-06-02T16:48:05.333+08:00</AlarmRtnTime>
<TimeInState>97410</TimeInState>
<SysGroup>安全监测监控系统</SysGroup>
<TagType>一氧化碳</TagType>
<EngUnit>ppm</EngUnit>
<DataType>1</DataType>
<HiAlarmLimit>24</HiAlarmLimit>
<LoAlarmLimit>0</LoAlarmLimit>
<UnitName>小屯煤矿</UnitName>
</Table> <Table diffgr:id="Table2" msdata:rowOrder="1">
<AlarmState>调校</AlarmState>
<TagKey>YK03113022114</TagKey>
<TagName>1811运顺管道红外甲烷</TagName>
<Value>2.912</Value>
<AlarmTime>2019-06-01T01:39:36.41+08:00</AlarmTime>
<AlarmRtnTime>2019-06-01T03:07:36.377+08:00</AlarmRtnTime>
<TimeInState>5280</TimeInState>
<SysGroup>安全监测监控系统</SysGroup>
<TagType>高浓度甲烷</TagType>
<EngUnit>%CH4</EngUnit>
<DataType>1</DataType>
<HiAlarmLimit>0</HiAlarmLimit>
<LoAlarmLimit>0</LoAlarmLimit>
<UnitName>五轮山煤矿</UnitName>
</Table>
</GetTagValueJsonResult>
</GetTagValueJsonResponse>
</soap:Body>
</soap:Envelope>
目的:获取<Table>标签下的所有子标签后面跟的值,创建一个对象,用对象来接收取出来的值。
bean代码:
package yk.bigdata.dl.ias.bean; import static yk.bigdata.dl.ias.getData.GetTime.getNowTime;
/**
* Created with IntelliJ IDEA.
* User: 吹静静
* Date: 2019/4/7
* Time: 9:31
* Description: bean
*/
/**
* <AlarmState>调校</AlarmState>
* <TagKey>YK03112034112</TagKey>
* <TagName>1611运顺回风流CO</TagName>
* <Value>0</Value>
* <AlarmTime>2019-06-01T13:44:35.477+08:00</AlarmTime>
* <AlarmRtnTime>2019-06-02T16:48:05.333+08:00</AlarmRtnTime>
* <TimeInState>97410</TimeInState>
* <SysGroup>安全监测监控系统</SysGroup>
* <TagType>一氧化碳</TagType>
* <EngUnit>ppm</EngUnit>
* <DataType>1</DataType>
* <HiAlarmLimit>24</HiAlarmLimit>
* <LoAlarmLimit>0</LoAlarmLimit>
* <UnitName>小屯煤矿</UnitName>
*/
public class BeanAlarmHis { private String AlarmState;
private String TagKey;
private String TagName;
private String Value;
private String AlarmTime;
private String AlarmRtnTime;
private String TimeInState;
private String SysGroup;
private String TagType;
private String EngUnit;
private String DataType;
private String HiAlarmLimit;
private String LoAlarmLimit;
private String UnitName;
private String KBN0 = "0"; // 流式处理的标志
private String KBN1 = "1"; // 离线处理的标志
private String CREATE_TIME; public String getAlarmState() {
return AlarmState;
} public void setAlarmState(String alarmState) {
AlarmState = alarmState;
} public String getTagKey() {
return TagKey;
} public void setTagKey(String tagKey) {
TagKey = tagKey;
} public String getTagName() {
return TagName;
} public void setTagName(String tagName) {
TagName = tagName;
} public String getValue() {
return Value;
} public void setValue(String value) {
Value = value;
} public String getAlarmTime() {
return AlarmTime;
} public void setAlarmTime(String alarmTime) {
AlarmTime = alarmTime;
} public String getAlarmRtnTime() {
return AlarmRtnTime;
} public void setAlarmRtnTime(String alarmRtnTime) {
AlarmRtnTime = alarmRtnTime;
} public String getTimeInState() {
return TimeInState;
} public void setTimeInState(String timeInState) {
TimeInState = timeInState;
} public String getSysGroup() {
return SysGroup;
} public void setSysGroup(String sysGroup) {
SysGroup = sysGroup;
} public String getTagType() {
return TagType;
} public void setTagType(String tagType) {
TagType = tagType;
} public String getEngUnit() {
return EngUnit;
} public void setEngUnit(String engUnit) {
EngUnit = engUnit;
} public String getDataType() {
return DataType;
} public void setDataType(String dataType) {
DataType = dataType;
} public String getHiAlarmLimit() {
return HiAlarmLimit;
} public void setHiAlarmLimit(String hiAlarmLimit) {
HiAlarmLimit = hiAlarmLimit;
} public String getLoAlarmLimit() {
return LoAlarmLimit;
} public void setLoAlarmLimit(String loAlarmLimit) {
LoAlarmLimit = loAlarmLimit;
} public String getUnitName() {
return UnitName;
} public void setUnitName(String unitName) {
UnitName = unitName;
} public String getKBN0() {
KBN0 = "0";
return KBN0;
} public String getKBN1() {
KBN1 = "1";
return KBN1;
} public String getCREATE_TIME() {
CREATE_TIME = getNowTime();
return CREATE_TIME;
} @Override
public String toString() { return "BeanAlarmHis{" +
"AlarmState='" + AlarmState + '\'' +
", TagKey='" + TagKey + '\'' +
", TagName='" + TagName + '\'' +
", Value='" + Value + '\'' +
", AlarmTime='" + AlarmTime + '\'' +
", AlarmRtnTime='" + AlarmRtnTime + '\'' +
", TimeInState='" + TimeInState + '\'' +
", SysGroup='" + SysGroup + '\'' +
", TagType='" + TagType + '\'' +
", EngUnit='" + EngUnit + '\'' +
", DataType='" + DataType + '\'' +
", HiAlarmLimit='" + HiAlarmLimit + '\'' +
", LoAlarmLimit='" + LoAlarmLimit + '\'' +
", UnitName='" + UnitName + '\'' +
'}';
}
}
解析代码:
package yk.bigdata.dl.ias.fileParse; import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import yk.bigdata.dl.ias.bean.BeanAlarmHis; import java.io.ByteArrayInputStream;
import java.util.ArrayList;
import java.util.List; import static yk.bigdata.dl.ias.getData.GetTime.timeParse;
/**
* Created with IntelliJ IDEA.
* User: 吹静静
* Date: 2019/7/3
* Time: 9:31
* Description: 解析GetAlarmHis数据
*/
public class AlarmHisXmlFileParse { public static List<BeanAlarmHis> dom4jXml(String interfaceData) throws Exception{
List<Element> elementList = null;
List<BeanAlarmHis> beanAlarmHisList = null; try {
SAXReader sr = new SAXReader();
Document document = sr.read(new ByteArrayInputStream(interfaceData.getBytes())); Element root = document.getRootElement();
elementList = root.elements();
beanAlarmHisList = new ArrayList();
} catch (DocumentException e) {
e.printStackTrace();
} for (Element e : elementList) {
// 解析标签下一级标签
Element e1 = e.element("GetTagValueJsonResponse");
Element e2 = e1.element("GetTagValueJsonResult");
List<Element> elementList1 = e2.elements();
for (Element el:elementList1){
BeanAlarmHis beanAlarmHis = new BeanAlarmHis();
beanAlarmHis.setAlarmState(el.elementText("AlarmState"));
beanAlarmHis.setTagKey(el.elementText("TagKey"));
beanAlarmHis.setTagName(el.elementText("TagName"));
beanAlarmHis.setValue(el.elementText("Value"));
beanAlarmHis.setAlarmTime(timeParse(el.elementText("AlarmTime"))); // 对时间格式进行转换
beanAlarmHis.setAlarmRtnTime(timeParse(el.elementText("AlarmRtnTime"))); // 对时间格式进行转换
beanAlarmHis.setTimeInState(el.elementText("TimeInState"));
beanAlarmHis.setSysGroup(el.elementText("SysGroup"));
beanAlarmHis.setTagType(el.elementText("TagType"));
beanAlarmHis.setEngUnit(el.elementText("EngUnit"));
beanAlarmHis.setDataType(el.elementText("DataType"));
beanAlarmHis.setHiAlarmLimit(el.elementText("HiAlarmLimit"));
beanAlarmHis.setLoAlarmLimit(el.elementText("LoAlarmLimit"));
beanAlarmHis.setUnitName(el.elementText("UnitName"));
beanAlarmHisList.add(beanAlarmHis);
}
}
return beanAlarmHisList;
}
}
Java 解析XML数据的更多相关文章
- java解析xml的三种方法
java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax; import org.xml.sax.Attributes; import org.xml.sax.SAXE ...
- Android网络之数据解析----SAX方式解析XML数据
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- java 解析XML文档
Java 解析XML文档 一.解析XML文档方式: 1.DOM方式:将整个XML文档读取到内存中,按照XML文件的树状结构图进行解析. 2.SAX方式:基于事件的解析,只需要加载XML中的部分数据,优 ...
- 【iOS-cocos2d-X 游戏开发之九】Cocos2dx利用CCSAXParser解析xml数据&CCMutableDictionary使用与注意!
本站文章均为李华明Himi原创,转载务必在明显处注明:转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2dx/694.html ☞ ...
- JAVA解析XML的四种方式
java解析xml文件四种方式 1.介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这 ...
- 【Java】详解Java解析XML的四种方法
XML现在已经成为一种通用的数据交换格式,平台的无关性使得很多场合都需要用到XML.本文将详细介绍用Java解析XML的四种方法. AD: XML现在已经成为一种通用的数据交换格式,它的平台无关性,语 ...
- java解析xml的几种方式
java解析xml的几种方式 DOM DOM的全称是Document ObjectModel,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称D ...
- (四)SAX方式解析XML数据
SAX方式解析XML数据 文章来源:http://www.cnblogs.com/smyhvae/p/4044170.html 一.XML和Json数据的引入: 通常情况下,每个需要访问网络的应用程 ...
- java解析xml文件并输出
使用java解析xml文件,通过dom4j,代码运行前需先导入dom4j架包. ParseXml类代码如下: import java.io.File; import java.util.ArrayLi ...
随机推荐
- composer.json详解
composer.json 架构:https://docs.phpcomposer.com/04-schema.html#homepage composer.json 完全解析:https://lea ...
- 一道面试题关于js中逗号
一.今天遇到一个面试题,自我感觉是会,但是却做错了.人都是这样,自我感觉良好,其实也就预警自己已经忽视一些细节以及一些自我感知. 面试题: ,j=,k; ,j<;i++,j++){ k=i+j; ...
- selenium与webdriver驱动与firefox、 chrome匹配版本
一.Chrome python3 selenium3.11.0(直接pip安装即可) chromedriver_win32:2.38 Chrome版本: 65.0.3325.146(正式版本)(32 ...
- CF938G Shortest Path Queries 和 CF576E Painting Edges
这两道都用到了线段树分治和按秩合并可撤销并查集. Shortest Path Queries 给出一个连通带权无向图,边有边权,要求支持 q 个操作: x y d 在原图中加入一条 x 到 y 权值为 ...
- SpringMVC_原理(转)
在整个Spring MVC框架中,DispatcherServlet处于核心位置,它负责协调和组织不同组件完成请求处理并返回响应的工作.具体流程为:1)客户端发送http请求,web应用服务器接收到这 ...
- [Go] Slices vs Array
It is recommended to use 'slice' over 'Array'. An array variable denotes the entire array; it is not ...
- 解决bash: less: command not found
问题描述 使用less命令查找日志时,less命令未找到: 解决办法 安装less,执行如下命令: npm install -g less
- Phalcon框架的编译安装 内存不足的解决办法
对症解决 有两种解决方法,一种是提升ECS系统内存.但是却要真金白银跟阿里云去购买的.另一种,则是手动创建swap交换文件.下面来介绍第二种方法. 第一步:首先确定系统是否已经开启swap交换分区: ...
- GoCN每日新闻(2019-10-16)
GoCN每日新闻(2019-10-16) GoCN每日新闻(2019-10-16) 1. 持续的性能分析与优化 https://medium.com/@tvii/continuous-profilin ...
- php在Linux下的相对路径问题
如图所示,我在 /root/phpcode/ 下面有两个php文件. a.php 与 b.php,我用 a.php 去 require b.php ,然后 b.php 输出 1. 现在我在 /root ...