XMLPULL 解析xml

/**
* 解析市场信息XML数据 并保存数据到database
* @param market_xml_string
* @param context
* @return
*/
public static boolean readStringXmlOut(String market_xml_string,Context context) {
long start1 = System.currentTimeMillis();
ArrayList<MarketGroup> martketGroupList = new ArrayList<MarketGroup>();
ArrayList<Market> martketList = new ArrayList<Market>();
ArrayList<Stock> stockList = new ArrayList<Stock>();
//市场name,等等
Market temp_market = new Market();
int tag_flag = 0;//1:perHand,2:PriceExtend 3:TradePhases
try {

//定义工厂 XmlPullParserFactory
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();

//定义解析器 XmlPullParser
XmlPullParser parser = factory.newPullParser();

//获取xml输入数据
parser.setInput(new StringReader(market_xml_string));

//开始解析事件
int eventType = parser.getEventType();

//处理事件,不碰到文档结束就一直处理
while (eventType != XmlPullParser.END_DOCUMENT) {
//因为定义了一堆静态常量,所以这里可以用switch
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
break;
case XmlPullParser.START_TAG:
//给当前标签起个名字
String tagName = parser.getName();
tag_flag = 0;
//修改市场组信息
if (tagName.equals("MarketGroup")) {
String name = parser.getAttributeValue(0);
String short_name = parser.getAttributeValue(1);
String type = parser.getAttributeValue(2);

MarketGroup mg = new MarketGroup();
mg.setName(name);
mg.setShort_name(short_name);
mg.setType(type);
martketGroupList.add(mg);

}else if(tagName.equals("Market")){
int count = parser.getAttributeCount();
for(int i=0;i<count;i++){
String name = parser.getAttributeName(i);
if("name".equals(name)){
temp_market.setName(parser.getAttributeValue(i));
}else if("shortname".equals(name)){
temp_market.setShort_name(parser.getAttributeValue(i));
}else if("type".equals(name)){
temp_market.setType(parser.getAttributeValue(i));
}else if("stocktype".equals(name)){
temp_market.setStock_type(parser.getAttributeValue(i));
}else if("lastupdate".equals(name)){
temp_market.setLast_update(parser.getAttributeValue(i));
}else{

}
}
}else if(tagName.equals("PerHand")){
tag_flag =1;
}else if(tagName.equals("PriceExtend")){
tag_flag =2;
}else if(tagName.equals("TradePhases")){
tag_flag =3;
}else if(tagName.equals("StockTable")){

}else if(tagName.equals("Stock")){
String name = parser.getAttributeValue(0);
String code = parser.getAttributeValue(1);
String pyjc = parser.getAttributeValue(2);
String market_type = parser.getAttributeValue(3);
String stock_type = parser.getAttributeValue(4);
String decimal = parser.getAttributeValue(5);
String unit = parser.getAttributeValue(6);

String prePrice = parser.getAttributeValue(7);
String preHolding = parser.getAttributeValue(8);
String highLimit = parser.getAttributeValue(9);
String lowLimit = parser.getAttributeValue(10);
String day5Vol = parser.getAttributeValue(11);
String ma10Day = parser.getAttributeValue(12);

String ma20Day = parser.getAttributeValue(13);
String ma50Day = parser.getAttributeValue(14);
String week52High = parser.getAttributeValue(15);
String week52Low = parser.getAttributeValue(16);
String monthHigh = parser.getAttributeValue(17);
String monthLow = parser.getAttributeValue(18);

String reserved1 = parser.getAttributeValue(19);
String reserved2 = parser.getAttributeValue(20);
String reserved3 = parser.getAttributeValue(21);

Stock stock = new Stock();
stock.setName(name);
stock.setCode(code);
stock.setPyjc(pyjc);
stock.setMarket_type(market_type);
stock.setStock_type(stock_type);
stock.setDecimal(decimal);
stock.setUnit(unit);
stock.setPre_price(prePrice);
stock.setPre_holding(preHolding);
stock.setHigh_limit(highLimit);
stock.setLow_limit(lowLimit);
stock.setDay5Vol(day5Vol);
stock.setMal0Day(ma10Day);
stock.setMa20Day(ma20Day);
stock.setMa50Day(ma50Day);
stock.setWeek52High(week52High);
stock.setWeek52Low(week52Low);
stock.setMonthHigh(monthHigh);
stock.setMonthLow(monthLow);
stock.setReserved1(reserved1);
stock.setReserved2(reserved2);
stock.setReserved3(reserved3);

stockList.add(stock);
}

break;
case XmlPullParser.TEXT:
// System.out.println(parser.getText());
if(tag_flag == 1){
temp_market.setPer_hand(parser.getText());
}else if(tag_flag == 2){
temp_market.setPrice_extend(parser.getText());
}else if(tag_flag == 3){
temp_market.setTrade_phases(parser.getText());
}
break;
case XmlPullParser.END_TAG:
//给当前标签起个名字
tag_flag=0;//这个地方必须复位为0 否则插入数据是会错误
String tagName_end_tag = parser.getName();
if(tagName_end_tag.equals("TradePhases")){
//修改市场信息
Market market = new Market();
market.setName(temp_market.getName());
market.setShort_name(temp_market.getShort_name());
market.setType(temp_market.getType());
market.setStock_type(temp_market.getStock_type());
market.setLast_update(temp_market.getLast_update());
market.setPer_hand(temp_market.getPer_hand());
market.setPrice_extend(temp_market.getPrice_extend());
market.setTrade_phases(temp_market.getTrade_phases());

martketList.add(market);
}
break;
case XmlPullParser.END_DOCUMENT:
break;
}

//别忘了用next方法处理下一个事件,忘了的结果就成死循环#_#
eventType = parser.next();
}

} catch (XmlPullParserException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
long end1 = System.currentTimeMillis();
System.out.println("解析XML耗时:" + (end1-start1));
/****************批量更新数据start*********************/
long start = System.currentTimeMillis();
DatabaseService db = new DatabaseService(context);
try{
db.updateMarketGroupData(martketGroupList);
db.updateMarketData(martketList);
db.updateStockData(stockList);
}catch(Exception ex){
ex.printStackTrace();
}finally{
db.close();
}
long end = System.currentTimeMillis();
System.out.println("数据更新耗时:" + (end-start));
/****************批量更新数据end*********************/
return true;
}
/**
* 解析市场信息XML数据 并保存数据到database
* @param market_xml文件
* @param context
* @return
*/
public static boolean readXmlOut(Context context) {
long start1 = System.currentTimeMillis();
ArrayList<MarketGroup> martketGroupList = new ArrayList<MarketGroup>();
ArrayList<Market> martketList = new ArrayList<Market>();
ArrayList<Stock> stockList = new ArrayList<Stock>();
//市场name,等等
Market temp_market = new Market();
int tag_flag = 0;//1:perHand,2:PriceExtend 3:TradePhases
try {

//定义工厂 XmlPullParserFactory
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();

//定义解析器 XmlPullParser
XmlPullParser parser = factory.newPullParser();

//获取xml输入数据
//读取文件流
InputStream stream=context.getResources().openRawResource(R.raw.init_market);
parser.setInput(stream, "GB2312");

//开始解析事件
int eventType = parser.getEventType();

//处理事件,不碰到文档结束就一直处理
while (eventType != XmlPullParser.END_DOCUMENT) {
//因为定义了一堆静态常量,所以这里可以用switch
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
break;
case XmlPullParser.START_TAG:
//给当前标签起个名字
String tagName = parser.getName();
tag_flag = 0;
//修改市场组信息
if (tagName.equals("MarketGroup")) {
String name = parser.getAttributeValue(0);
String short_name = parser.getAttributeValue(1);
String type = parser.getAttributeValue(2);

MarketGroup mg = new MarketGroup();
mg.setName(name);
mg.setShort_name(short_name);
mg.setType(type);
martketGroupList.add(mg);

}else if(tagName.equals("Market")){
int count = parser.getAttributeCount();
for(int i=0;i<count;i++){
String name = parser.getAttributeName(i);
if("name".equals(name)){
temp_market.setName(parser.getAttributeValue(i));
}else if("shortname".equals(name)){
temp_market.setShort_name(parser.getAttributeValue(i));
}else if("type".equals(name)){
temp_market.setType(parser.getAttributeValue(i));
}else if("stocktype".equals(name)){
temp_market.setStock_type(parser.getAttributeValue(i));
}else if("lastupdate".equals(name)){
temp_market.setLast_update(parser.getAttributeValue(i));
}else{

}
}
}else if(tagName.equals("PerHand")){
tag_flag =1;
}else if(tagName.equals("PriceExtend")){
tag_flag =2;
}else if(tagName.equals("TradePhases")){
tag_flag =3;
}else if(tagName.equals("StockTable")){

}else if(tagName.equals("Stock")){
String name = parser.getAttributeValue(0);
String code = parser.getAttributeValue(1);
String pyjc = parser.getAttributeValue(2);
String market_type = parser.getAttributeValue(3);
String stock_type = parser.getAttributeValue(4);
String decimal = parser.getAttributeValue(5);
String unit = parser.getAttributeValue(6);

String prePrice = parser.getAttributeValue(7);
String preHolding = parser.getAttributeValue(8);
String highLimit = parser.getAttributeValue(9);
String lowLimit = parser.getAttributeValue(10);
String day5Vol = parser.getAttributeValue(11);
String ma10Day = parser.getAttributeValue(12);

String ma20Day = parser.getAttributeValue(13);
String ma50Day = parser.getAttributeValue(14);
String week52High = parser.getAttributeValue(15);
String week52Low = parser.getAttributeValue(16);
String monthHigh = parser.getAttributeValue(17);
String monthLow = parser.getAttributeValue(18);

String reserved1 = parser.getAttributeValue(19);
String reserved2 = parser.getAttributeValue(20);
String reserved3 = parser.getAttributeValue(21);

Stock stock = new Stock();
stock.setName(name);
stock.setCode(code);
stock.setPyjc(pyjc);
stock.setMarket_type(market_type);
stock.setStock_type(stock_type);
stock.setDecimal(decimal);
stock.setUnit(unit);
stock.setPre_price(prePrice);
stock.setPre_holding(preHolding);
stock.setHigh_limit(highLimit);
stock.setLow_limit(lowLimit);
stock.setDay5Vol(day5Vol);
stock.setMal0Day(ma10Day);
stock.setMa20Day(ma20Day);
stock.setMa50Day(ma50Day);
stock.setWeek52High(week52High);
stock.setWeek52Low(week52Low);
stock.setMonthHigh(monthHigh);
stock.setMonthLow(monthLow);
stock.setReserved1(reserved1);
stock.setReserved2(reserved2);
stock.setReserved3(reserved3);

stockList.add(stock);
}

break;
case XmlPullParser.TEXT:
// System.out.println(parser.getText());
if(tag_flag == 1){
temp_market.setPer_hand(parser.getText());
}else if(tag_flag == 2){
temp_market.setPrice_extend(parser.getText());
}else if(tag_flag == 3){
temp_market.setTrade_phases(parser.getText());
}
break;
case XmlPullParser.END_TAG:
//给当前标签起个名字
tag_flag=0;//这个地方必须复位为0 否则插入数据是会错误
String tagName_end_tag = parser.getName();
if(tagName_end_tag.equals("TradePhases")){
//修改市场信息
Market market = new Market();
market.setName(temp_market.getName());
market.setShort_name(temp_market.getShort_name());
market.setType(temp_market.getType());
market.setStock_type(temp_market.getStock_type());
market.setLast_update(temp_market.getLast_update());
market.setPer_hand(temp_market.getPer_hand());
market.setPrice_extend(temp_market.getPrice_extend());
market.setTrade_phases(temp_market.getTrade_phases());

martketList.add(market);
}
break;
case XmlPullParser.END_DOCUMENT:
break;
}

//别忘了用next方法处理下一个事件,忘了的结果就成死循环#_#
eventType = parser.next();
}

} catch (XmlPullParserException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
long end1 = System.currentTimeMillis();
System.out.println("解析XML耗时:" + (end1-start1));
/****************批量更新数据start*********************/
long start = System.currentTimeMillis();
DatabaseService db = new DatabaseService(context);
try{
db.updateMarketGroupData(martketGroupList);
db.updateMarketData(martketList);
db.updateStockData(stockList);
}catch(Exception ex){
ex.printStackTrace();
}finally{
db.close();
}
long end = System.currentTimeMillis();
System.out.println("数据更新耗时:" + (end-start));
/****************批量更新数据end*********************/
SharedPreferences share = context.getSharedPreferences(MConstant.INITED_XML, 0);
share.edit().putString(MConstant.INITED_XML, "1").commit();
return true;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值