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 ...
随机推荐
- 数据库系统load飙高问题解决思路(转)
工作过程中有时候会接收到数据库服务器器load 飙高的报警,比如: load1 15.25 base: 8.52,collect time:2014-08-30 如何处理load 异常飙高的报警呢? ...
- Windows安装redis报错处理(转!)
要谈则谈,要打便打! ---2019.5.9,贸易战 转自:http://www.yayihouse.com/yayishuwu/chapter/1297 安装redis报错信息 [9204] 15 ...
- ArrayList 与LinkedList 的区别及分别的优缺点
ArrayList,与LinkedList都是属于实现了List接口的类.首先从名字前缀开始看 ,Array表示数组,Link表示链表. 所以ArrayList底层是基于动态数组的.而LinkedL ...
- js 变量以及函数传参
一.变量: 基本类型是变量对象重新创建一个新值给变量对象空间,虽然是同一个值但是互不影响. 引用类型是也是将一个值重新赋值给新的变量空间,但是这个值是堆中对象的一个指针,新的变量和旧的变量指向是同一个 ...
- P1525 关押罪犯[扩展域并查集]
题目来源:洛谷 题目描述 S城现有两座监狱,一共关押着N名罪犯,编号分别为1−N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用“怨气值”(一个正整 ...
- 【Selenium-WebDriver实战篇】基于java的selenium之验证码识别内容
==================================================================================================== ...
- XJCO1711 Procedural Programming
University of Leeds School of ComputingProcedural Programming XJCO1711Semester 1, 2019-2020Coursewor ...
- Mybatis框架-联表查询显示问题解决
需求:查询结果要求显示用户名,用户密码,用户的角色 因为在用户表中只有用户角色码值,没有对应的名称,角色名称是在码表smbms_role表中,这时我们就需要联表查询了. 这里需要在User实体类中添加 ...
- leetcode 一些算法题及答案
1. 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这 ...
- 洛谷P1353 USACO 跑步 Running
题目 一道入门的dp,首先要先看懂题目要求. 容易得出状态\(dp[i][j]\)定义为i时间疲劳度为j所得到的最大距离 有两个坑点,首先疲劳到0仍然可以继续疲劳. 有第一个方程: \(dp[i][0 ...