2012-09-26 77 views
3

我剛剛開始在android應用程序開發,雖然我確實有一些java的知識。Android在線XML解析問題 - SAX解析器

所以我的應用程序需要解析兩個local & internet based xml files。我確實設法在本地解析它們,但我一直在嘗試一段時間來解析互聯網上的xml文件,但沒有成功。

我已經使用了XML Pull Parser & SAX Parser。此外,我也嘗試了多個XML文件,但沒有進展。我發佈了一個示例代碼SAX Parser,其中包含一個URL示例XML文件。

在程序中,我試圖做的只是從元素中讀取一個簡單的屬性,但無法讀取該文件。

import java.net.URL; 
import javax.xml.parsers.SAXParser; 
import javax.xml.parsers.SAXParserFactory; 
import org.xml.sax.InputSource; 
import org.xml.sax.XMLReader; 
import android.os.Bundle; 
import android.app.Activity; 
import android.widget.TextView; 


public class WeatherXMLParsing extends Activity 
{ 
TextView tv; 

static final String baseUrl="http://gunsnroses23.zxq.net/ak/catalog.xml"; 
@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_weather); 
    tv = (TextView) findViewById(R.id.tv1); 


    try 
    { 
     URL website= new URL(baseUrl); 

     //setting up XMLReader & SAXParser to parse data 
     SAXParserFactory spf=SAXParserFactory.newInstance(); 
     SAXParser sp=spf.newSAXParser(); 
     XMLReader xr=sp.getXMLReader(); 
     HandlingXMLStuff doingWork= new HandlingXMLStuff(); 
     xr.setContentHandler(doingWork); 
     xr.parse(new InputSource(website.openStream())); 
     String information=doingWork.getinformation(); 
     tv.setText(information); 
    } 
    catch (Exception e) 
    { 
     tv.setText("Error"); 
    } 
    } 
} 

public class XMLDataCollected { 

String catalog=null; 


public void setCatalog(String c){ 
    catalog=c; 
} 
public String datatoString(){ 
    return "The attribute of catalog is " +catalog; 
} 
} 

import org.xml.sax.Attributes; 
import org.xml.sax.SAXException; 
import org.xml.sax.helpers.DefaultHandler; 

public class HandlingXMLStuff extends DefaultHandler 
{ 
private XMLDataCollected info=new XMLDataCollected(); 
public String getinformation(){ 
    return info.datatoString(); 
} 

@Override 
public void startElement(String uri, String localName, String qName, 
     Attributes attributes) throws SAXException 
     { 
    // TODO Auto-generated method stub 
     if (localName.equals("catalog")){ 
      String catalog=attributes.getValue("journal"); 
      info.setCatalog(catalog); 
     } 
    } 
} 

任何幫助將不勝感激。謝謝。

更新:

我想感謝所有回答我的問題的人。非常感謝你,但問題已解決。代碼沒有問題。唯一簡單的問題是AndroidManifest.xml沒有定義「internet」權限。這是我再次通過代碼&後一直在想的。我找不到任何問題,因爲它是這樣一個簡單的代碼,但謝謝大家。

+0

你可以給XML的鏈接? – mukesh

+0

查看代碼:|,baseUrl – XMight

+0

是否可以成功解析xml的其他節點。 – mukesh

回答

0

我想你在這裏做的是從一開始就錯了。 我認爲最好的方法來實現你想要的是「使用android做一個HTTP請求」,並且在得到響應字符串之後,你會像解析一個本地的那樣解析它。看到這個帖子怎麼辦HTTP請求:

Make an HTTP request with android

0
URL url = new URL("http://www.cricinfo.com/rss/content/story/feeds/6.xml");//parsing a sample url 
XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
factory.setNamespaceAware(false); 
XmlPullParser xpp = factory.newPullParser(); 
xpp.setInput(getInputStream(url), "UTF_8"); 
int eventType = xpp.getEventType(); 
while (eventType != XmlPullParser.END_DOCUMENT) { 
if (eventType == XmlPullParser.START_TAG) { 

    if (xpp.getName().equalsIgnoreCase("item")) {//first tag is item 
     insideItem = true; 
    } 
} 
} 

public InputStream getInputStream(URL url) { //open connection to url 
     try { 
      return url.openConnection().getInputStream(); 
     } catch (IOException e) { 
      return null; 
     } 

這無疑爲我工作解析RSS提要的XML文檔

+0

同時檢查鏈接是否中斷//網絡故障 – Raghunandan