나는 안드로이드 응용 프로그램의 res 폴더 안에 포함 된 raw라는 폴더 내에 정의한 XML 파일을 구문 분석하려고합니다. 본질적으로 XML 파일을 처리하는 방법에 대한 Android 개발자 가이드의 버전을 사용했습니다.안드로이드에서 res에서 XML 파일 구문 분석
http://developer.android.com/training/basics/network-ops/xml.html
현재 응용 프로그램을 실행하고 파일을 찾습니다, 다음 구문 분석 방법을 실행하지만 데이터를 추출 할 태그의 위치를 추정하는 방법은 건너 뛸 것 같고 결과 내 Unit 유형의 배열 목록에는이 인스턴스에 이름이없는 Unit이 있습니다.
다음은 XML 파일을 구문 분석 한 클래스의 복사본입니다. 그 다음에 테스트 할 XML 파일이옵니다.
public class UnitTableXMLParser extends AsyncTask<InputStream, Void, Void> {
private final String ns = null;
public ArrayList<Unit> parse(InputStream in) throws XmlPullParserException, IOException {
try {
XmlPullParser parser = Xml.newPullParser();
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
parser.setInput(in, null);
parser.nextTag();
return readFeed(parser);
} finally {
in.close();
}
}
private ArrayList<Unit> readFeed(XmlPullParser parser) throws XmlPullParserException, IOException {
parser.require(XmlPullParser.START_TAG, ns, "resources");
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
if (name.equals("unit")) {
units.add(readUnit(parser));
} else {
skip(parser);
}
}
return units;
}
private Unit readUnit(XmlPullParser parser) throws XmlPullParserException, IOException {
parser.require(XmlPullParser.START_TAG, ns, "unit");
String name = null;
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String parserName = parser.getName();
if (parserName.equals("name")) {
name = readName(parser);
}
}
return new Unit(name);
}
private String readName(XmlPullParser parser) throws IOException, XmlPullParserException {
parser.require(XmlPullParser.START_TAG, ns, "name");
String name = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "name");
return name;
}
private String readText(XmlPullParser parser) throws IOException, XmlPullParserException {
String result = "";
if (parser.next() == XmlPullParser.TEXT) {
result = parser.getText();
parser.nextTag();
}
return result;
}
private void skip(XmlPullParser parser) throws XmlPullParserException, IOException {
if (parser.getEventType() != XmlPullParser.START_TAG) {
throw new IllegalStateException();
}
int depth = 1;
while (depth != 0) {
switch (parser.next()) {
case XmlPullParser.END_TAG:
depth--;
break;
case XmlPullParser.START_TAG:
depth++;
break;
}
}
}
@Override
protected Void doInBackground(InputStream... params) {
Log.d(TAG, "UnitTableXMLParser exectued");
try {
parse(params[0]);
} catch (IOException e) {
Log.d("Background Thread IOException", e.getMessage());
} catch (XmlPullParserException e) {
Log.d("Background Thread XmlPullParserException", e.getMessage());
} catch (Exception e) {
Log.d("Exception", e.getMessage());
}
return null;
}
@Override
protected void onPostExecute(Void result) {
xmlParsed = true;
super.onPostExecute(result);
}
}
그리고 XML 파일 :
그리고 출력 : 내가 잘못 갈 수
어떤 아이디어가 많이 주시면 감사하겠습니다, 내가 시도 name.matches 문자열 일치를 포함하지만 아직 작동하지 않습니다.
건배,
제이미