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 ...
随机推荐
- Prometheus学习系列(四)之Prometheus 配置说明
前言 本文来自Prometheus官网手册 和 Prometheus简介 说明 Prometheus通过命令行和配置文件进行配置,命令行配置不能修改的系统参数(例如存储位置,要保留在磁盘和内存中的数据 ...
- Ocelot网关在.Net Core 的使用
1. 项目环境 .Net Core 2.2 Ocelot 13.5.2 2. 基本使用 * Nuget 安装 Ocelot , Ocelot.Provider.Polly * 修改 Pro ...
- ES-映射和分析
参考: https://es.xiaoleilu.com/052_Mapping_Analysis/00_Intro.html 1. 概念 映射(mapping)机制用于进行字段类型确认,将每个字段匹 ...
- ES-索引操作
参考: https://es.xiaoleilu.com/030_Data/05_Document.html <ELasticsearch in Action> 以下的操作在ES7.5版本 ...
- C lang: VLA(variable-length array)
Xx_VLA Introduction VLA:variable-length array,not variable array size,but variable arary dimensional ...
- cobbler无人值守
一.背景介绍 作为运维,在公司经常遇到一些机械性重复工作要做,例如:为新机器装系统,一台两台机器装系统,可以用光盘.U盘等介质安装,1小时也完成了,但是如果有成百台的服务器还要用光盘.U盘去安装, ...
- 字典 dict方法
字典 student = {'sId': '1101', 'sName': '张三', 'sClass': '软件测试', 'sColl': '信息技术学院'} # 根据键查询 若不存在会报错 pri ...
- [转载]MGR变量group_replication_primary_member
组复制的状态变量只有一个,目前在8.0.17这个版本上还是存在的,未来会被废弃掉,我们在单主的模式下,可以用来查看哪个节点是读写节点. mysql: [Warning] Using a passwor ...
- YAPI windows 二次开发 树形结构 多层级结构 拖拽 数据导入 接口自动化测试
什么是YAPI: 高效.易用.功能强大的API管理平台 http://yapi.demo.qunar.com/ github: https://github.com/YMFE/yapi 可以去那里下载 ...
- IntelliJ中Git突然不能用,报错 xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools)
记录一个昨天碰到的问题以及解决方法,希望对碰到一样问题的你有用! 昨天升级了一下Mac OS,重启后再打开IntelliJ,突然Git就不能用了,报了下面这样的错: 开始以为是不是Git出了问题,打开 ...