2014-10-17 2 views
-1

현재 XmlResourceParser를 사용하여 일부 XML을 구문 분석하고 ArrayAdapter를 사용하여 ListView에 정보를 표시하려고합니다. 문제는, 나는 개미 결과를 얻지 못한다는 것이다.XML 구문 분석에서 아무 것도 반환하지 않습니다.

내 XML 구조는 다음과 같다 : 이제

<resources> 

<categories> 
    <animal> 
     <word> 
      <english>Animal</english> 
      <french>Animal</french> 
      <spanish>Animal</spanish> 
      <portuguese>Animal</portuguese> 
     </word> 
    </animal> 
    <transportation></transportation> 
    <location></location> 
    <clothing></clothing> 
    <color></color> 
    <people></people> 
    <job></job> 
    <society></society> 
    <art></art> 
    <beverages></beverages> 
    <food></food> 
    <home></home> 
    <electronics></electronics> 
    <body></body> 
    <nature></nature> 
    <material></material> 
    <math></math> 
    <directions></directions> 
    <seasons></seasons> 
    <numbers></numbers> 
    <months></months> 
    <days></days> 
    <time></time> 
    <verbs></verbs> 
    <adjectives></adjectives> 
</categories> 
각 카테고리는이 순간에 난 단지 모든 범주를 가져오고 그들을 보여주고 싶은, 그들에 다른 단어가 있지만합니다 목록보기. 시도하고 나는 다음과 같은 코드를 사용하고 모든 범주 얻으려면 : 그것은 구문 분석 할 때

private ArrayList<String> parseCategories() throws IOException { 
    ArrayList<String> categories = new ArrayList<String>(); 
    XmlResourceParser parser = getResources().getXml(R.xml.database); 

    try { 
     int eventType = parser.getEventType(); 
     while (eventType != XmlPullParser.END_DOCUMENT) { 
      if (eventType == XmlPullParser.START_TAG) { 
       if (parser.getName().equals("categories")) { 
        categories.add(parser.nextText()); 
       } 
      } 

      eventType = parser.next(); 
     } 
    } catch (XmlPullParserException e) { 
     Log.e("XmlPullParserException", e.toString()); 
    } 
    parser.close(); 

    return categories; 
} 

난 아직도 조금 미경 해요 :

public class MainActivity extends ActionBarActivity { 

private ListView list; 
private ArrayList<String> arrayCategories; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    list = (ListView) findViewById(R.id.listView1); 

    try { 
     arrayCategories = parseCategories(); 

     ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
       this, 
       R.id.listView1, 
       arrayCategories); 

     list.setAdapter(arrayAdapter); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

그리고 parseCategories 기능은이 다음이다 xml, 너희들이 이걸 도와 줄 수있어?

+1

categories 요소에는 "text"가없고 더 많은 요소 만 있습니다. (유일한 텍스트는' Animal'과 같은 태그에 있습니다.'.equals ("categories")'를'.equals ("english")'로 변경하십시오. – user2864740

+1

나는이 도움을 받아야합니다. 이미 대답했습니다. 문제. http://stackoverflow.com/questions/26397647/how-to-make-rss-news-reader-application-in-android/26398110 : [1] [1] [여기를 클릭] # 26398110 –

+0

기본적으로 카테고리를 '하드 코딩'해야한다고 말하고 있지만 특정 단어가 어떤 카테고리에 속하는지 어떻게 알 수 있습니까? –

답변

1

문제는 categories 요소에 "text"가 없다는 것입니다. 그러나 많은 어린이 요소가 있습니다.

방법 범주 요소를 직접 모든 하위 요소의 이름을 얻을 :

실제 작업은 하찮게로 요약 될 수 있는가?

이 문제

는 (훨씬 쉬울 것 DOM 및/또는 XPath 사용) XmlPullParser 복잡 조금을 만들어,하지만 행할 수있다. 여기의 트릭은 약간의 깊이 카운터를 유지하여 하위 트리를 건너 뛰는 것입니다. 재귀 함수도 작동합니다.

int eventType = parser.getEventType(); 
while (eventType != XmlPullParser.END_DOCUMENT) { 

    if (eventType == XmlPullParser.START_TAG 
     && parser.getName().equals("categories")) { // catergories start 

    int depth = 0; 
    eventType = parser.next(); 
    while (!(depth == 0 && eventType == XmlPullParser.END_TAG)) { // end categories 

     if (eventType == XmlPullParser.START_TAG) { 
     if (depth == 0) { // direct child of categories 
      categories.add(parser.getName()); 
     } 
     depth++; 
     } else if (eventType == XmlPullParser.END_TAG) { // depth > 0 
     depth--; 
     } 

     eventType = parser.next(); 
    } 

    } 

    eventType = parser.next(); 
} 
관련 문제