2013-02-23 2 views
0

У меня есть XML-файл. Структура файла XML ЗДЕСЬ:Ошибка при анализе XML-файла с помощью Xml DOMParser: Android

<albumlist> 
     <album value="Enrique Iglesias"><details value="1995"/> 
       <imageid value="eenrique"/> 
       <songs value="No Llores Por Mi"> 
        <lyrics>hhhehhehhehe </lyrics> 
       </songs> 
       <songs value="Trapecista"> 
        <lyrics>hhhehhehhehe </lyrics> 
       </songs> 
       <songs value="Por Amarte"> 
         <lyrics>hhhehhehhehe </lyrics> 
       </songs> 
     </album> 
</albumlist> 

Я хочу, чтобы извлечь текст для perticular песни для perticuler альбома. Для этого я написали код, который показывает мне список песен, но для этой композиции в сумерках я не могу извлечь лирику.

Вот моя функция, чтобы получить текст:

private String[] getLyrics() { 
     // TODO Auto-generated method stub 
     try { 
      InputStream in = getResources().openRawResource(R.raw.data); 
      DocumentBuilder builder = DocumentBuilderFactory.newInstance() 
        .newDocumentBuilder(); 
      Document doc = builder.parse(in, null); 
      NodeList albumnode = doc.getElementsByTagName("album"); 
      for (int k = 0; k < albumnode.getLength(); k++) 
      { 
       if (((Element) albumnode.item(k)).getAttribute("value").equals(albumname)) 
       { 
        NodeList nd = albumnode.item(k).getChildNodes(); 

        for (int j = 0; j < nd.getLength(); j++) { 

         Node subNode = nd.item(j); 
         if (subNode.getNodeName().equals("songs")) { 
          if (subNode.hasAttributes()) { 
           NamedNodeMap nnm = subNode.getAttributes(); 

           for (int i = 0; i < nnm.getLength(); i++) { 
            Node attrNode = nnm.item(i); 

            if (attrNode.getNodeType() == Node.ATTRIBUTE_NODE) { 
             Attr attribute = (Attr) attrNode; 
             String value = attribute.getValue(); 
             if (value.equals(songname)) { 
              NodeList lyricslist = subNode 
                .getChildNodes(); 
              for(int m=0 ; m<lyricslist.getLength();m++) 
              { 
               Node lyricsnode = lyricslist.item(m); 
               if (lyricsnode.getNodeType() == Node.TEXT_NODE) { 
                //Attr attribute = (Attr) attrNode; 
                String value1 = lyricsnode.getNodeValue(); 
                Lyrics[0]=value1; 
                Toast.makeText(getApplicationContext(), ""+value1, Toast.LENGTH_LONG).show(); 
               } 
              } 


             } 
            } 
           } 
          } 
         } 
        } 

       } 
      } 
      in.close(); 
     } 

     catch (Exception t) { 
      Toast.makeText(this, "Exception: " + t.getMessage(), 
        Toast.LENGTH_LONG).show(); 
     } 
     return Lyrics; 
    } 

Так что ошибка в моем коде. Весь день я провела его. Но, к сожалению, я не могу определить свою ошибку. Pleaze решает мою проблему. Thanx.

+0

Вместо DOM парсер, почему вы сделали не использовать анализатор SAX, который легче разрабатывать и отлаживать. – Jitendra

+0

ohk thanx .. можете ли вы отправить код для доступа к дочернему узлу с помощью анализатора SAX ?? – zanky

ответ

1

Используйте эту ссылку для SAX parser

, а также увидеть разницу б/ш саксофона и йот diffrence

Просто используйте этот анализатор для разбора ваш XML

public class EmployeeParser extends DefaultHandler { 

    private StringBuilder responseTag; 
    private List<Album> listAblum = new ArrayList<Album>(); 
    private Album album; 

    @Override 
    public void startDocument() throws SAXException { 
     super.startDocument(); 

     listAblum.clear(); 
    } 

    @Override 
    public void endDocument() throws SAXException { 
     super.endDocument(); 

    } 

    @Override 
    public void startElement(String uri, String localName, String qName, 
      Attributes attributes) throws SAXException { 
     super.startElement(uri, localName, qName, attributes); 

     responseTag = new StringBuilder(); 
     if (localName.equals("album")) { 
      album = new Album(); 
      album.setAlbumValue(attributes.getValue("value")); 
     } else if ("imageid".equals(localName)) { 
      album.setDetails(attributes.getValue("value")); 
     } else if ("songs".equals(localName)) { 
      album.setSongs(attributes.getValue("value")); 
     } 
    } 

    @Override 
    public void endElement(String uri, String localName, String qName) 
      throws SAXException { 
     super.endElement(uri, localName, qName); 

     if (localName.equals("album")) { 
      listAblum.add(album); 
     } else if ("lyrics".equals(localName)) { 
      album.setLyrics(responseTag.toString()); 
     } 

    } 

    @Override 
    public void characters(char[] ch, int start, int length) 
      throws SAXException { 
     super.characters(ch, start, length); 
     String str = new String(ch, start, length); 
     responseTag.append(str); 
    } 

    class Album { 
     private String songs, imageId, lyrics, albumValue, details; 

     public String getSongs() { 
      return songs; 
     } 

     public void setSongs(String songs) { 
      this.songs = songs; 
     } 

     public String getImageId() { 
      return imageId; 
     } 

     public void setImageId(String imageId) { 
      this.imageId = imageId; 
     } 

     public String getLyrics() { 
      return lyrics; 
     } 

     public void setLyrics(String lyrics) { 
      this.lyrics = lyrics; 
     } 

     public String getAlbumValue() { 
      return albumValue; 
     } 

     public void setAlbumValue(String albumValue) { 
      this.albumValue = albumValue; 
     } 

     public String getDetails() { 
      return details; 
     } 

     public void setDetails(String details) { 
      this.details = details; 
     } 
    } 
} 
+0

ohk thanx ...... – zanky

+0

Но в чем проблема с моим кодом? – zanky

+0

Должен ли я помочь вам разобрать этот xml? – Jitendra

Смежные вопросы