package com.sagaware.app.databasebackup;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import android.util.Log;
import android.util.Xml;
public class XmlParserPull implements XmlParser {
public List<DataTable> getDateTable(String fileName) {
// TODO Auto-generated method stub
List<DataTable> dataTableList = null;
DataTable dataTable = null;
List<DataRow> dataRowList = null;
DataRow dataRow = null;
List<DataColumn> dataColumnList = null;
DataColumn dataColumn = null;
XmlPullParser parser = Xml.newPullParser();
try {
// auto-detect the encoding from the stream
File file = new File(fileName);
InputStream inputStream = new FileInputStream(file);
parser.setInput(inputStream, null);
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
String nodeName = parser.getName();
switch (eventType) {
// 文档开始
case XmlPullParser.START_DOCUMENT:
dataTableList = new ArrayList<DataTable>();
break;
// 节点开始
case XmlPullParser.START_TAG:
if (TABLE.equals(nodeName)) {
dataTable = new DataTable();
dataTable.setName(parser.getAttributeValue(0));
dataTable.setSql(parser.getAttributeValue(1));
dataRowList = new ArrayList<DataRow>();
} else if (ROW.equals(nodeName)) {
dataRow = new DataRow();
dataColumnList = new ArrayList<DataColumn>();
} else if (COL.equals(nodeName)) {
dataColumn = new DataColumn();
dataColumn.setName(parser.getAttributeValue(0));
dataColumn.setValue(parser.nextText());
}
break;
// 节点结束
case XmlPullParser.END_TAG:
if (TABLE.equals(nodeName)) {
dataTable.setDataRowList(dataRowList);
dataTableList.add(dataTable);
dataTable = null;
} else if (ROW.equals(nodeName)) {
dataRow.setDataColumnList(dataColumnList);
dataRowList.add(dataRow);
dataRow = null;
} else if (COL.equals(nodeName)) {
dataColumnList.add(dataColumn);
dataColumn = null;
}
break;
}
eventType = parser.next();
}
} catch (Exception e) {
Log.e("XmlParserPull:", e.getMessage(), e);
throw new RuntimeException(e);
}
return dataTableList;
}
}