Java解析XML字符串,取出其中<aaaa><![CDATA[(XXX)]]></aaa>里面的XXX值,也可以使用xml解析的其他方式,这是最简单的字符串解析
直接贴一段业务代码,这段代码是解析请求返回的xml格式字符串,为了取出其中的值便于下一步的使用。
@RequestMapping(value="/search",produces = {"text/html;charset=utf-8"})
public String searchGoods(@RequestParam(value="itemBarCode", required = false)String itemBarCode,
@RequestParam(value="typenumber", required = false)String typenumber,
@RequestParam(value="mts", required = false)String mts,
@RequestParam(value="mte", required = false)String mte,
@RequestParam(value="ocdsupport", required = false)String ocdsupport,
@RequestParam(value="yunfeimoban", required = false)String yunfeimoban,
@RequestParam(value="goodsname", required = false)String goodsname,
@RequestParam(value="goodstate", required = false)String goodstate,
@RequestParam(value="kucun2", required = false)String kucun2,
@RequestParam(value="kucun1", required = false)String kucun1,
@RequestParam(value="barcode", required = false)String barcode,
@RequestParam(value="type", required = false)String type,
@RequestParam(value="innertype", required = false)String innertype,
@RequestParam(value="storenumber", required = false)String storenumber,
@RequestParam(value="namelabel", required = false)String namelabel,
@RequestParam(value="checkstate", required = false)String checkstate,
@RequestParam(value="storename", required = false)String storename,
@RequestParam(value="pageInfo", required = false)String pageInfo) throws ApiException {
StoreKeyInfo storeKeyInfo = storeKeyInfoService.getStoreKeyInfo(storename);
Map<Integer,String> maps = new HashMap<Integer,String>();
SdkClient sdkClient = null;
if(storeKeyInfo!=null) {
String appKey = storeKeyInfo.getAppKey();
String appSecret = storeKeyInfo.getAppSecret();
String session = storeKeyInfo.getAuthenCode();
sdkClient = new SdkClient(appKey, appSecret, session, version,format,
connectTimeout,readTimeout,needEnableParser,needCheckRequest);
}else{
System.out.println("找不到店铺:店铺名字为空");
}
ItemsListGet itemsListGet=new ItemsListGet();
//开始设置查询条件,有的参数就设置,没有就不设置
if(typenumber!=null && !typenumber.equals("")){
itemsListGet.setItm(typenumber);
}
if(mts!=null && !mts.equals("")){
itemsListGet.setMts(mts);
}
if(mte!=null && !mte.equals("")){
itemsListGet.setMte(mte);
}
if(ocdsupport!=null && !ocdsupport.equals("")){
itemsListGet.setIs_cod(ocdsupport);
}
if(goodsname!=null && !goodsname.equals("")){
itemsListGet.setName(goodsname);
}
if(goodstate!=null && !goodstate.equals("")){
itemsListGet.setIts(goodstate);
}
if(kucun1!=null && !kucun1.equals("")){
itemsListGet.setSlv(kucun1);
}
if(kucun2!=null && !kucun2.equals("")){
itemsListGet.setShv(kucun2);
}
if(barcode!=null && !barcode.equals("")){
itemsListGet.setBar_code(barcode);
}
if(innertype!=null && !innertype.equals("")){
itemsListGet.setSc(innertype);
}
if(namelabel!=null && !namelabel.equals("")){
itemsListGet.setItb(namelabel);
}
if(checkstate!=null && !checkstate.equals("")){
itemsListGet.setDatatype(checkstate);
}
ItemsListGetRequest itemsListGetRequest=new ItemsListGetRequest();
itemsListGetRequest.setItemsListGet(itemsListGet);
ItemsListGetResponse result=sdkClient.excute(itemsListGetRequest);
String[] ids = null;
String[] updatetimeStrs = null;
String[] datatypeStrs = null;
String pageSize = null;
int index11 = 0;
int index22 = 0;
System.out.println("返回的数据是:"+result.getBody());
index11 = result.getBody().indexOf("<pageTotal><![CDATA[");
index22 = result.getBody().indexOf("]]></pageTotal>");
pageSize = result.getBody().substring(index11 + 20, index22);
int page = Integer.valueOf(pageSize);
System.out.println("总页码"+pageSize);
// 将页码控制在10页,其他的点击页面11页,才调用
if (page >= 1) {
page = 1;
}
//如果没有点击页码,就按照这个查询
if(pageInfo !=null && !pageInfo.equals("") && pageInfo.equals("0")) {
int insertIndex = 0; //如果没有传入PageInfo,默认第一页。
for (int pageindex = 1; pageindex <= page; pageindex++) {
itemsListGet.setP(String.valueOf(pageindex));
itemsListGetRequest = new ItemsListGetRequest();
itemsListGetRequest.setItemsListGet(itemsListGet);
result = sdkClient.excute(itemsListGetRequest);
System.out.println("返回的信息"+result.getBody());
int count = countStr(result.getBody(), "<itemID><![CDATA[");
ids= new String[count];
updatetimeStrs =new String[count];
datatypeStrs = new String[count];
int[] indexbegin = new int[1000000];
int[] indexbegin2 = new int[1000000];
int[] indexbegin3 = new int[1000000];
for (int i = 1; i <= count; i++) {
indexbegin[i - 1] = getIndex(result.getBody(), i, "<itemID>");
indexbegin2[i - 1] = getIndex(result.getBody(), i, "<updateTime>");
indexbegin3[i - 1] = getIndex(result.getBody(), i, "<datatype>");
}
int[] indexend = new int[1000000];
int[] indexend2 = new int[1000000];
int[] indexend3 = new int[1000000];
for (int i = 1; i <= count; i++) {
indexend[i - 1] = getIndex(result.getBody(), i, "</itemID>");
indexend2[i - 1] = getIndex(result.getBody(), i, "</updateTime>");
indexend3[i - 1] = getIndex(result.getBody(), i, "</datatype>");
}
for (; insertIndex - (pageindex - 1) * 20 < count; insertIndex++) {
int index1 = 0;
int index2 = 0;
int index41 = 0;
int index42 = 0;
int index31 = 0;
int index32 = 0;
index1 = indexbegin[insertIndex - (pageindex - 1) * 20];
index2 = indexend[insertIndex - (pageindex - 1) * 20];
ids[insertIndex] = result.getBody().substring(index1 + 17, index2 - 3);
index41 = indexbegin2[insertIndex - (pageindex - 1) * 20];
index42 = indexend2[insertIndex - (pageindex - 1) * 20];
updatetimeStrs[insertIndex] = result.getBody().substring(index41 + 21, index42 - 3);
index31 = indexbegin3[insertIndex - (pageindex - 1) * 20];
index32 = indexend3[insertIndex - (pageindex - 1) * 20];
datatypeStrs[insertIndex] = result.getBody().substring(index31 + 19, index32 - 3);
}
}
}else if(pageInfo !=null && !pageInfo.equals("") && !pageInfo.equals("0")){
//如果有点击页码就根据页码单页查询
page = Integer.valueOf(pageInfo);
itemsListGet.setP(String.valueOf(page));
itemsListGetRequest = new ItemsListGetRequest();
itemsListGetRequest.setItemsListGet(itemsListGet);
result = sdkClient.excute(itemsListGetRequest);
updatetimeStrs = new String[page * 20];
datatypeStrs = new String[page * 20];
System.out.println("返回的信息"+result.getBody());
int count = countStr(result.getBody(),"<itemID><![CDATA[");
ids = new String[count]; //查询具体某一页的数据
int[] indexbegin = new int[1000000];
int[] indexbegin22 = new int[1000000];
int[] indexbegin33 = new int[1000000];
for(int i=1;i<=count;i++){
indexbegin[i-1] = getIndex(result.getBody(),i,"<itemID>");
indexbegin22[i - 1] = getIndex(result.getBody(), i, "<updateTime>");
indexbegin33[i - 1] = getIndex(result.getBody(), i, "<datatype>");
}
int[] indexend = new int[1000000];
int[] indexend22 = new int[1000000];
int[] indexend33 = new int[1000000];
for(int i=1;i<=count;i++){
indexend[i-1] = getIndex(result.getBody(),i,"</itemID>");
indexend22[i - 1] = getIndex(result.getBody(), i, "</updateTime>");
indexend33[i - 1] = getIndex(result.getBody(), i, "</datatype>");
}
for(int i=0;i<count;i++){
int index1 = 0;
int index2 = 0;
int index41 = 0;
int index42 = 0;
int index31 = 0;
int index32 = 0;
index1 = indexbegin[i];
index2 = indexend[i];
ids[i] = result.getBody().substring(index1+17,index2-3);
index41 = indexbegin22[i];
index42 = indexend22[i];
updatetimeStrs[i] = result.getBody().substring(index41 + 21, index42 - 3);
index31 = indexbegin33[i];
index32 = indexend33[i];
datatypeStrs[i] = result.getBody().substring(index31 + 19, index32 - 3);
}
}
String returnstr = "";
//存储ids.length条信息
String[] strs = new String[ids.length];
List<ItemVO> listVO = new ArrayList<ItemVO>();
System.out.println("id个数"+ids.length);
for(int i=0;i<ids.length;i++){
if(ids[i]!=null&&!ids[i].equals("undefined")) {
String id = ids[i];
//根据Id获取item商品信息,其中包括
//商品ID 图片 商品名称 店铺名称 当当价库存 商品状态 审核状态 最后修改时间
ItemVO itemVO = new ItemVO();
//审核状态 和最后修改时间去ItemList获取
itemVO.setCheckstate(datatypeStrs[i]);
itemVO.setLastupdatetime(updatetimeStrs[i]);
itemVO.setStorename(storename);
//商品ID 图片 商品名称 店铺名称 当当价库存 商品状态 去Item接口获取
ItemGetRequest request = new ItemGetRequest();
ItemGet get = new ItemGet();
get.setIt(id);
request.setItemsGet(get);
ItemGetResponse re = sdkClient.excute(request);
//开始解析单个的商品
String itemInfoStr = re.getBody();
System.out.println("查询到的商品返回信息"+re.getBody());
String itemId = getAttribute(itemInfoStr, "<itemID>", "</itemID>");
itemVO.setStoreId(itemId);
String itemName = getAttribute(itemInfoStr, "<itemName>", "</itemName>");
itemVO.setGoodsname(itemName);
String unitPrice = getAttribute(itemInfoStr, "<unitPrice>", "</unitPrice>");
itemVO.setUnitPrice(Float.parseFloat(unitPrice));
String stockCount = getAttribute(itemInfoStr, "<stockCount>", "</stockCount>");
itemVO.setStockCount(Integer.parseInt(stockCount));
String itemState = getAttribute(itemInfoStr, "<itemState>", "</itemState>");
itemVO.setGoodstate(itemState);
//解析一下图片
int countpic = countStr(re.getBody(), "<pic");
String pistrs = "";
int[] beginpic = new int[countpic];
int[] endpic = new int[countpic];
for (int h = 1; h <= countpic; h++) {
beginpic[h - 1] = getIndex(re.getBody(), h, "<pic");
endpic[h - 1] = getIndex(re.getBody(), h, "</pic");
}
for (int j = 0; j < countpic; j++) {
int begin0 = beginpic[j];
int end0 = endpic[j];
pistrs += re.getBody().substring(begin0 + 15, end0 - 3);
}
itemVO.setPicture(pistrs);
if (i < ids.length - 1)
returnstr += itemVO.toString() + "#";
else
returnstr += itemVO.toString();
}
}
returnstr+="@"+pageSize;
System.out.println("return数据:"+returnstr);
return returnstr;
}
public String getAttribute(String src,String pattern1,String pattern2){
String result = null;
int index1 = 0;
int index2 = 0;
index1 =src.indexOf(pattern1);
index2 = src.indexOf(pattern2);
result = src.substring(index1+pattern1.length()+9,index2-3);
return result;
}
public static int getIndex(String string, int i, String str) {
Matcher slashMatcher = Pattern.compile(str).matcher(string);
int mIdx = 0;
while (slashMatcher.find()) {
mIdx++;
if (mIdx == i) {
break;
}
}
return slashMatcher.start();
}
private int countStr(String str,String sToFind) {
int num = 0;
while (str.contains(sToFind)) {
str = str.substring(str.indexOf(sToFind) + sToFind.length());
num ++;
}
return num;
}
Java解析XML字符串,取出其中<aaaa><![CDATA[(XXX)]]></aaa>里面的XXX值,也可以使用xml解析的其他方式,这是最简单的字符串解析的更多相关文章
- vue :class 可以接收 字符串 数组 和 对象 对象里面的key值 根据true或false 显示不显示
vue :class 可以接收 字符串 数组 和 对象 对象里面的key值 根据true或false 显示不显示 https://cn.vuejs.org/v2/guide/class-and-sty ...
- Java 从 Redis中取出的Json字符串 带斜杠的问题解决方案
Java 从 Redis中取出的Json字符串 带斜杠的问题: { "code": 200, "message": "成功", " ...
- PHP处理XML文档,没有CDATA部分数据处理
在博客备份时,导出了所有文章,导出是xml文档,文章内容在CDATA部分. 这里介绍下XML中CDATA: 所有 XML 文档中的文本均会被解析器解析.只有 CDATA 区段(CDATA sectio ...
- java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串
java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串 package com.zdz.test; im ...
- C# 后台解析json,简单方法 字符串序列化为对象,取值
如果后台是一个JSON的字符串格式如下: string str = "{\"Success\":true,\"Msg\":\"成功!\&qu ...
- 简单使用JDOM解析XML
原文:http://liuwentao.iteye.com/blog/59978 使用JDOM解析XML一.前言JDOM是Breet Mclaughlin和Jason Hunter两大Java高手的创 ...
- mybatis 的 dao 接口跟 xml 文件里面的 sql 是如何建立关系的?一步步解析
序言 在开始正文之前,首先解释Dao接口和XML文件里的SQL是如何一一对应的? 一句话讲完就是:mybatis 会先解析这些xml 文件,通过 xml 文件里面的命名空间 (namespace)跟d ...
- json解析出现:java.lang.ClassCastException: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to XXX
感谢大佬:https://blog.csdn.net/one_ink/article/details/99817676 一.出错原因 当我们利用json解析中的toBean方法时,如果它的属性里面包含 ...
- js 解析XML 在Edge浏览器下面 无法准确读到节点属性值
js 解析XML 在Edge浏览器下面 无法准确读到节点属性值 Dom.documentElement.childNodes[j].attributes[2] 这个是大众写法 在win10的edge ...
随机推荐
- IDEA的Maven设置阿里镜像
作为一名.net开发学习java,虽然学习起来没啥难度,但是各种配置实在让人头大. 下面就简单记录下IDEA的Maven设置阿里镜像 进入开发软件的这个设置 点击进入 如图所示 第一个是你安装mave ...
- Linux逻辑卷的创建
什么是LVM? LVM(逻辑卷管理器):是Linux环境下对磁盘分区进行管理的一种机制.主要作用是动态分配磁盘分区及调整磁盘分区大小,并且可以让多个分区或者物理硬盘作为一个逻辑卷(相当于一个逻辑硬盘) ...
- Spring 核心技术与产品理念剖析【下】
3. Spring Cloud 蝶变重生 Spring 框架的升级演进都是围绕分层架构进行的,从简单到复杂,再回到简单的过程.如果我们没有经历过 Spring 最开始繁琐的配置,然后一步步精简,就根本 ...
- JS查找某个字符在字符串中出现的位置及次数
var str = 'fdhfgcsaedvcfhgfh'; var index = str.indexOf('f'); // 字符出现的位置 var num = 0; // 这个字符出现的次数 wh ...
- MySQL的数据库定义语法
创建数据库 在MySQL中,使用 CREATE DATABASE 或 CREATE SCHEMA 语句创建数据库 语法结构: CREATE {DATABASE|SCHEMA}[IF NOT EXIST ...
- Dynamics 365-当OrganizationServiceProxy是Null的时候
不少从事D365研发工作的朋友,可能或多或少都经历过这么一种情况,使用CrmServiceClient对象初始化一个实例,然后发现OrganizationServiceProxy对象是null.不仅如 ...
- arcgis api for javascript 学习(一) 调用在线发布的动态地图
1.图中显示为arcgis软件中显示的地图文件 2.调用动态地图主要的是知道动态地图的URL地址 3.通过IDE(webstorm)调用动态地图,如图 4.话不多说,直接上代码 <!DOCTYP ...
- 运维工程师必会工具(Nmap和TCPdump)
1.NMap工具 主要功能:探测主机是否在线.扫描主机开放端口和嗅探网络服务,用于网络探测和安全扫描. NMap支持很多扫描技术,例如:UDP.TCPconnect().TCPSYN(半开扫描).ft ...
- 《软件安装》VMware Workstation 不注册 下载
问答环节 问:为什么要下载安装VMware Workstation 答:VMware Workstation 可以安装虚拟机,我们可以把我们安装的一些软件装在虚拟机上面,防止自己的电脑卡顿(软件装多了 ...
- Java学习关于setContentPane()和getContentPane()的应用
http://www.java-gaming.org/topics/active-rendering-in-j2me/25240/view.html