2017-07-26 79 views
1

我創建了XML解析RSS閱讀器,但它只讀取最後3個節點(標題,鏈接和描述)。我想知道哪些代碼行使這個技巧(我的意思是讀最後的節點)。想從這rss site讀取前三個節點我應該怎麼做? 我是一個nuwbie。任何人都可以將答案作爲代碼發佈?哪一行代碼讓我的RSS閱讀器只能讀取底部標籤?

public class HandleXML { 
private String title = "title"; 
private String link = "link"; 
private String description = "description"; 
private String title1 = "title"; 
private String link1 = "link"; 
private String description1 = "description"; 
private String urlString = null; 
private XmlPullParserFactory xmlFactoryObject; 
public volatile boolean parsingComplete = true; 

public HandleXML(String url){ 
    this.urlString = url; 
} 

public String getTitle(){ 
    return title; 
} 

public String getLink(){ 
    return link; 
} 

public String getDescription(){ 
    return description; 
} 

public void parseXMLAndStoreIt(XmlPullParser myParser) { 
    int event; 
    String text=null; 

    try { 
     event = myParser.getEventType(); 

     while (event != XmlPullParser.END_DOCUMENT) { 
      String name=myParser.getName(); 

      switch (event){ 
       case XmlPullParser.START_TAG: 
        break; 

       case XmlPullParser.TEXT: 
        text = myParser.getText(); 
        break; 

       case XmlPullParser.END_TAG: 

        if(name.equals("title")){ 
         title = text; 

        } 

        else if(name.equals("link")){ 
         link = text; 

        } 

        else if(name.equals("description")){ 
         description = text; 

        } 

        else{ 
        } 

        break; 
      } 

      event = myParser.next(); 
     } 

     parsingComplete = false; 
    } 

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

public void fetchXML(){ 
    Thread thread = new Thread(new Runnable(){ 
     @Override 
     public void run() { 

      try { 
       URL url = new URL(urlString); 
       HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

       conn.setReadTimeout(10000 /* milliseconds */); 
       conn.setConnectTimeout(15000 /* milliseconds */); 
       conn.setRequestMethod("GET"); 
       conn.setDoInput(true); 

       // Starts the query 
       conn.connect(); 
       InputStream stream = conn.getInputStream(); 

       xmlFactoryObject = XmlPullParserFactory.newInstance(); 
       XmlPullParser myparser = xmlFactoryObject.newPullParser(); 

       myparser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false); 
       myparser.setInput(stream, null); 

       parseXMLAndStoreIt(myparser); 
       stream.close(); 
      } 

      catch (Exception e) { 
      } 
     } 
    }); 
    thread.start(); 
} 
} 

回答

0

正是這部分代碼負責閱讀上面提到的元素。

if(name.equals("title")){ 
    title = text; 
} 
else if(name.equals("link")){ 
    link = text; 
} 
else if(name.equals("description")){ 
    description = text; 
} 
else{ 
// Write similar conditions for the other tags that you want to parse. 
} 
+0

我該如何改變它?像我想要顯示的第一個節點,你可以編輯答案? –

+0

你在那裏嗎? –

+0

你計劃提取哪些元素,我們可以幫助你,但是請告訴我們你到目前爲止所得到的結果。它會幫助你。 – Amit

0

您正在使用while循環來處理文檔。 在該循環中,您的代碼將讀取所有標題,鏈接和描述節點。 問題在於它每次都會覆蓋變量,因此您得到的是最後一個標題,鏈接和描述。

如果你想只讀杉杉標題,鏈接和描述,你可以這樣做:

初始化變量是這樣的:

private String title; 
private String link; 
private String description; 

比:

if(name.equals("title") && title != null){ 
    title = text; 
} 
else if(name.equals("link") && link != null){ 
    link = text; 
} 
else if(name.equals("description") && description != null){ 
    description = text; 
} 

編輯(試試這個,警告:我還沒有測試過)

public class HandleXML { 
    public volatile boolean parsingComplete = true; 
    private String title; 
    private String link; 
    private String description; 
    private String urlString = null; 
    private XmlPullParserFactory xmlFactoryObject; 

    public HandleXML(String url) { 
     this.urlString = url; 
    } 

    public String getTitle() { 
     return title; 
    } 

    public String getLink() { 
     return link; 
    } 

    public String getDescription() { 
     return description; 
    } 

    public void parseXMLAndStoreIt(XmlPullParser myParser) { 
     int event; 
     String text = null; 

     try { 
      event = myParser.getEventType(); 

      while (event != XmlPullParser.END_DOCUMENT) { 
       String name = myParser.getName(); 

       switch (event) { 
        case XmlPullParser.START_TAG: 
         break; 

        case XmlPullParser.TEXT: 
         text = myParser.getText(); 
         break; 

        case XmlPullParser.END_TAG: 

         if (name.equals("title") && title != null) { 
          title = text; 
         } 

         else if (name.equals("link") && link != null) { 
          link = text; 
         } 

         else if (name.equals("description") && description != null) { 
          description = text; 
         } 

         break; 
       } 

       event = myParser.next(); 
      } 

      parsingComplete = false; 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public void fetchXML() { 
     Thread thread = new Thread(new Runnable() { 
      @Override 
      public void run() { 

       try { 
        URL url = new URL(urlString); 
        HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

        conn.setReadTimeout(10000 /* milliseconds */); 
        conn.setConnectTimeout(15000 /* milliseconds */); 
        conn.setRequestMethod("GET"); 
        conn.setDoInput(true); 

        // Starts the query 
        conn.connect(); 
        InputStream stream = conn.getInputStream(); 

        xmlFactoryObject = XmlPullParserFactory.newInstance(); 
        XmlPullParser myparser = xmlFactoryObject.newPullParser(); 

        myparser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false); 
        myparser.setInput(stream, null); 

        parseXMLAndStoreIt(myparser); 
        stream.close(); 
       } 

       catch (Exception e) { 
        // TODO: 27/07/2017 handle exception 
       } 
      } 
     }); 
     thread.start(); 
    } 
} 
+0

你可以編輯或發佈完整的代碼?,因爲我沒有得到你 –

+0

所以我應該刪除while循環?或者是其他東西 –