/**
* 解析市场信息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;
}
分享到:
相关推荐
XMLPull解析XML是一种轻量级、高效的处理XML文档的方式,尤其在资源有限的移动设备如Android平台上尤为适用。它的全称是XML Pull Parser,是一种基于事件驱动的解析模型,允许开发者顺序读取XML文档,而无需构建整个...
总结来说,“复杂XmlPull解析Demo”是一个学习和实践如何使用XmlPull解析XML的实例,涵盖了初始化、事件处理和递归解析等关键概念。通过这个Demo,新手可以逐步掌握XML文档的事件驱动解析,从而在实际项目中更有效地...
在描述中提到的jar包,很可能是XMLPull解析库的实现,例如XMLPull_1_1_3_4c.jar,这个版本的XMLPull库提供了Java API,使得开发者可以直接在Java项目中集成并使用XMLPull解析XML。 标签“xmlpull”、“xml解析”和...
在处理XML文件时,有多种解析方式,其中XMLPull解析是一种轻量级、高效的解析方法,适用于资源有限的环境,如移动设备。XMLPull解析器允许应用程序以拉取(pull)的方式逐个读取XML元素,而不是等待整个文档加载完毕...
使用XMLPull解析XML的基本步骤如下: 1. 创建XMLPullParser实例,通常通过XmlPullParserFactory类的newInstance()方法获取。 2. 配置解析器,设置输入源,例如从文件、网络或字符串输入流中读取XML数据。 3. 开始...
XmlPull解析是一种高效且轻量级的XML处理方式,它允许开发者通过事件驱动的模型来解析XML文档。这种解析方式不需要构建完整的XML文档对象模型(DOM),因此在内存使用和性能上都比DOM解析更优秀,尤其适用于资源有限...
在实际开发中,使用XMLPull解析XML时,首先需要创建一个`XMLPullParser`实例,并通过`setInput()`方法设置输入源。然后,通过不断地调用`next()`方法,解析器会逐个返回XML文档的事件。根据返回的事件类型,如START_...
以下是一个简单的示例代码,展示了如何使用XMLPull解析XML: ```java XMLPullParserFactory factory = XMLPullParserFactory.newInstance(); XMLPullParser parser = factory.newPullParser(); // 设置输入源,如...
在Android开发中,KXML2库实现了XMLPULL解析接口,使得开发者可以用KXML2的API进行Pull解析。这种结合使用的方式既保留了KXML2的易用性,又具备了Pull解析的高效性。 5. **使用步骤**: - 引入KXML2库:在Android...
XMLPull是轻量级的API,用于解析XML文档,它允许开发者以事件驱动的方式处理XML流,而无需提前加载整个文档到内存中。 XStream的核心功能在于它的“marshalling”和“unmarshalling”能力。Marshalling是将Java对象...
解析XML是处理这些数据的关键步骤,它将XML文本转换为程序可以理解的对象,以便进一步操作。本节将探讨两种常用的XML解析方式:XMLPull和XMLSAX。 1. XMLPull解析: XMLPull是一种轻量级的解析器,适用于资源有限的...
本文将深入探讨Android中的Pull解析XML技术,以及如何利用模板快速实现XML的解析。 首先,理解XML Pull解析器的工作原理是至关重要的。在Android中,XML Pull解析是一种轻量级处理XML文档的方式,它允许应用移动...
`org/xmlpull/v1/XmlPullParserException`是XMLPull API中抛出的一个异常,通常表示在解析XML时遇到了错误。 `XmlPullParserException`是当解析过程中遇到语法错误、非法状态转换或其他解析问题时抛出的异常。例如...
Java中使用XmlPull解析XML的过程主要包括以下步骤: 1. **获取XmlPullParser**: 首先,你需要创建一个`XmlPullParser`实例。在Android环境中,可以使用`XmlPullParserFactory`工厂类来创建。对于非Android环境,...
XMLPull是一种轻量级的解析XML文档的方法,它允许开发者在没有额外依赖库的情况下高效地处理XML数据。这个项目通过源代码示例,展示了如何在实际应用中使用XMLPull API。 XMLPull解析器的工作原理是基于事件驱动的...
本文将深入探讨如何在Android中使用Pull解析器解析XML文件。 一、XML Pull解析器简介 XML Pull解析器(XML Pull API)是一种基于事件驱动的解析模型,它不需预先加载整个XML文档,而是逐行读取,当遇到特定的XML...
XMLPull解析器是一种事件驱动的解析方式,它不会一次性加载整个XML文档到内存中,而是通过阅读XML文档的各个节点,触发相应的事件(如START_DOCUMENT、START_TAG、END_TAG等)。这样既节省了内存,又提高了解析速度...
XMLPull解析器是一种轻量级、高效的解析XML的方式,它不需要完整的DOM树(文档对象模型)或者SAX(简单API for XML)事件驱动模型。本教程将深入探讨Android中的XMLPull解析,并通过具体的源代码分析来帮助理解其...
本文将深入探讨如何在Android中使用PULL解析器(Pull Parser)来解析XML文档,这是一种轻量级且高效的解析方式。 **PULL解析器概述** PULL解析器(Pull Parsing)是一种事件驱动的解析模型,它不需要完整的XML文档...
老罗的Android视频教程深入浅出地讲解了如何在Android平台上解析XML文件,这对于开发者来说是非常重要的技能。以下是对这个主题的详细解释。 1. **XML基本概念** XML是一种自描述的语言,其结构清晰,易于机器和...