편집 : 완전히 해결되지!
모든 항목을 db에 어떻게 추가 할 수 있습니까? Data1, Data2, Data3 등을 새 열에 추가하려고합니다.
아래 실제 코드에서는 res/raw의 XML에서 파싱 데이터가 매력처럼 작동합니다. 하지만 URL에서 가져올 수 없습니다. 내가 잘못하고있는거야?SAXParser | XML 데이터베이스를 통해 XML 데이터를 구문 분석
나는 그물에 XML 데이터를 구문 분석합니다.
<entrys>
<entry>
<data1>a number</data1>
<data2>a name</data2>
<data3>a webUrl</data3>
<data4>a streamUrl</data4>
<data5>a logoUrl</data5>
</entry>
<entry>
<data1>other number</data1>
<data2>other name</data2>
<data3>other webUrl</data3>
<data4>other streamUrl</data4>
<data5>other logoUrl</data5>
</entry>
<-- more entrys like this, up to one number defined in another xml -->
</entrys>
나는 내 방식 (아래 코드)에 구문 분석하면, 내가 마지막 항목 데이터를 얻을 : XML은 것 같습니다.
문제는, 필자는 모든 항목 (및 해당 데이터)을 db로 원합니다. 그것을 어떻게 성취 할 수 있습니까?
class ParsedExampleDataSet {
private String data1;
private String data2;
private String data3;
private String data4;
private String data5;
public String toString() {
return "entry ID: " + data1 + "entry Name: "
+ data2 + "entry webUrl: " + data3
+ "entry streamUrl: " + data4
+ "entry Logo: " + data5;
}
public String getdata1() { return data1; }
public void setdata1(String data1) { this.data1 = data1; }
public String getdata2() { return data2; }
public void setdata2(String data2) { this.data2 = data2; }
public String getdata3() { return data3; }
public void setdata3(String data3) { this.data3 = data3; }
public String getdata4() { return data4; }
public String getdata5() { return data5; }
public void setdata4(String data4) {
this.data4 = data4;
}
public void setdata5(String data5) {
this.data5 = data5;
}
}
class ContentHandler extends DefaultHandler {
private enum Tags {
entry, data1, data2, data3, data4, data5, entrys
}
private boolean in_entryTag = false;
private boolean in_entrys = false; //opened at document start, closed at document end
private boolean in_entry = false; //opened at new entry, closed after entry completet
private boolean in_data1 = false; //the entry id
private boolean in_data2 = false; //entry Name
private boolean in_data3 = false; //entry weburl
private boolean in_data4 = false; //entry streamUrl
private boolean in_data5 = false; // Url to entry logo
private ParsedExampleDataSet DataSet;
private Vector<ParsedExampleDataSet> MyParsedExampleDataSets;
public ContentHandler() {
super();
this.MyParsedExampleDataSets = new Vector<ParsedExampleDataSet>();
}
public Vector<ParsedExampleDataSet> getParsedExampleDataSets() {
return this.MyParsedExampleDataSets;
}
public void startDocument() throws SAXException { }
public void endDocument() throws SAXException { }
public void startElement(String n, String l, String q, Attributes a) {
switch(Tags.valueOf(l)) {
case entry:
in_entryTag = true;
DataSet = new ParsedExampleDataSet();
break;
case data1:
in_data1 = true;
break;
case data2:
in_data2 = true;
break;
case data3:
in_data3 = true;
break;
case data4:
in_data4 = true;
break;
case data5:
in_data5 = true;
break;
case entrys:
break;
}
}
public void endElement(String n, String l, String q) {
switch(Tags.valueOf(l)) {
case entry:
in_entryTag = false;
MyParsedExampleDataSets.add(DataSet);
break;
case data1:
in_data1 = false;
break;
case data2:
in_data2 = false;
break;
case data3:
in_data3 = false;
break;
case data4:
in_data4 = false;
break;
case data5:
in_data5 = false;
break;
case entrys:
break;
}
}
public void characters(char ch[], int start, int length) {
if(this.in_data1){
DataSet.setdata1(new String(ch, start, length));
}else if(this.in_data2) {
DataSet.setdata2(new String(ch, start, length));
}else if(this.in_data3) {
DataSet.setdata3(new String(ch, start, length));
}else if(this.in_data4) {
DataSet.setdata4(new String(ch, start, length));
}else if(this.in_data5) {
DataSet.setdata5(new String(ch, start, length));
}
}
}
public class XMLparserSample extends Activity {
private TextView myTextView;
private static final String TAG = XMLparserSample.class.getSimpleName();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Vector<ParsedExampleDataSet> test = read(getResources().openRawResource(R.raw.sample));
String text = "";
for(int i=0; i < test.size(); i++)
text += test.get(i).toString();
myTextView = (TextView) findViewById(R.id.tv);
myTextView.setText(text);
Log.d(TAG, "vector = " + test);
}
public Vector<ParsedExampleDataSet> read(InputStream in) {
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp;
try {
sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
ContentHandler ch = new ContentHandler();
xr.setContentHandler(ch);
xr.parse(new InputSource(in));
return ch.getParsedExampleDataSets();
} catch (ParserConfigurationException e) {
} catch (SAXException e) {
} catch (IOException e) {}
return null;
}
}
전체 구문 분석 코드를 게시하십시오. – kosa
전체 코드가 추가되었습니다. – Leandros
MyParsedExampleDataSets에 데이터 세트를 추가하지 않았습니다. MyParsed에 모든 항목을 추가하고 반환하십시오. 그렇게하면 데이터 집합의 벡터를 얻을 수 있습니다. – kosa