2013-11-23 6 views
1

나는 이런 식의 120 개 항목이있는 XML 파일을 읽으려고합니다.android에서 XML 파일 읽기

Resources res = getResources(); 
XmlResourceParser x = res.getXml(R.xml.textos); 
     try { 
      insertXML(x); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (XmlPullParserException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

및 InsertXML는 다음과 같이 : 내 안드로이드 응용 프로그램에서

<?xml version="1.0" encoding="utf-8"?> 
<books> 
     <Book> 
      <bookName >Libro 1</bookName> 
      <bookSection>Unidad 1</bookSection> 
      <memorization>[A long string of information]…</memorization> 
     </Book> 
     <Book>.....</Book> 
</books> 

는 내가이 작업을 수행 한 OnCreate 따라서 무효에 ArrayList<book>

에 모든 정보를 넣어합니다. if (x.getAttributeValue(null, "Book") != null) {

에 가지 않을 때문에 실수를 내가 디버그 모드를 사용할 때 그래서 x.depth() = 0

말해

private void insertXML(XmlPullParser x) throws XmlPullParserException, IOException {   
     try { 

      int eventType = x.getEventType(); 

      while (eventType != XmlPullParser.END_DOCUMENT) { 

       Textos seleccion = new Textos(); 

       if (eventType == XmlPullParser.START_TAG) { 
        if (x.getAttributeValue(null, "Book") != null) { 
         seleccion.setBook(x.getAttributeValue(null, "bookName")); 
         seleccion.setSection(x.getAttributeValue(null, "bookSection")); 
         seleccion.setMemorization(x.getAttributeValue(null, "memorization")); 
        } 

       } 

       if (eventType == XmlPullParser.END_TAG) { 
        if (x.getName().equals("Book")) { 
         texto.add(seleccion); 
        } 
       } 

       eventType = x.next(); 
      } 

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

, 내가 잘못 뭐하는 거지?

답변

1

Book은 속성이 아닙니다. 요소 (태그)입니다. 다음을 사용하십시오 :

if (x.getName().equals("Book")) 

Book 요소에 있는지 확인하십시오. 그러나 실제로는 많은 도움이되지 않습니다. 실제로는 bookName, bookSectionmemorization 태그 이후입니다.

if (x.getName().equals("bookName")) { 
    seleccion.setBook(x.nextText()); 
} else if (x.getName().equals("bookSection")) { 
    seleccion.setSection(x.nextText()); 
} else if (x.getName().equals("memorization")) { 
    seleccion.setMemorization(x.nextText()); 
} 

그것은 요소와 속성의 차이를 이해하는 것이 중요합니다 : 당신이 실제로합니다 (START_TAG 이벤트에 대한 체크 이내) 할 생각한다. 예를 들면, :

<x y="z">Foo</x> 

소자<x>y"z"의 값을 갖는 속성이다 및 Foox 요소 내의 텍스트이다.

+0

감사합니다 존 나에게 약간의 도움을하지만 내 생각은 ArrayList를 Textos에서 XML의 모든 정보를 넣어하는 것입니다 그래서 지금은 방법을 잘 모릅니다 3 문자열 (도서, 절, 암기)와 클래스 계속해라. 도움이 되었습니까? –

+0

@David_Garcia : XML 추출 구문 분석기에서 정보를 추출하는 데 도움이되었습니다. 나머지 부분에 붙어 있으면 다른 질문처럼 들립니다. 어쨌든 여기에 풀 해석기를 사용할 이유가 있습니까? DOM API를 사용하는 것이 더 쉬울 것이라고 나는 의심한다. –

+0

저는 지금 당장 그것을 읽고있었습니다. DOM API를 사용하여 훨씬 더 나아졌고 모든 문제를 해결했습니다. 도움을 주셔서 감사합니다! –