Android:通过URL解析XML

时间:2013-02-18 06:44:28

标签: android json xml-parsing android-listview

我一直在通过网址进行一些JSONXML解析。我正在使用的网址为JSONObject,其中包含XML

这是我的代码,我为此做了些什么:

HttpClient hClient = new DefaultHttpClient();
        HttpGet hGet = new HttpGet(
                "URL for getting results");
        ResponseHandler<String> rHandler = new BasicResponseHandler();
        data = hClient.execute(hGet, rHandler);

        JSONObject json = new JSONObject(data);
        // get xml string form jsonObject
        String str_xml = json.getString("output");

        // now convert str_xml to xml document for xml parsing
        DocumentBuilderFactory factory = DocumentBuilderFactory
                .newInstance();
        DocumentBuilder db = factory.newDocumentBuilder();
        InputSource inStream = new InputSource();
        inStream.setCharacterStream(new StringReader(str_xml));
        Document doc = db.parse(inStream); // <<< getting xml Document here

以下是我JSONObject的{​​{1}}:

XML

现在,我必须解析{ "output": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Results>\n <Feed prov=\"dmoz\">\n <ResultSet id=\"webListings\" source=\"DMOZ\">\n <Listing description=\" - A bike shop in Brisbane. Stocks mountain bikes, road bikes, and BMX bikes.\n \" rank=\"1\" siteHost=\"http://www.lifecycle.net.au/\" title=\"Lifecycle Bike Shop\">\n <ClickUrl type=\"body\">http://www.lifecycle.net.au/</ClickUrl>\n </Listing>\n <Listing description=\" - Videos and pictures taken of both sport bikes and dirt bikes.\n \" rank=\"2\" siteHost=\"http://roadanddirt.com/\" title=\"Road and Dirt\">\n <ClickUrl type=\"body\">http://roadanddirt.com/</ClickUrl>\n </Listing>\n</Results>" } 并在列表视图中修复它们。以下是我得到的示例XML

XML

有人可以帮我修复列表视图中的这些内容。将不胜感激。

2 个答案:

答案 0 :(得分:0)

下面提到的链接清楚地描述了如何在android中解析XML。之后,您可以创建一个listViewAdapter,并将数据插入到列表视图中。

  

http://developer.android.com/training/basics/network-ops/xml.html

这可以帮助您使用listView:

  

http://developer.android.com/guide/topics/ui/layout/listview.html

答案 1 :(得分:0)

创建一个新的xml文件。将xml内容写入其中。然后开始使用SAXParser解析该xml文件。

InputSource is = new InputSource(new InputStream(xml_file));

SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();

dataHandler = new UIXMLHandler();
xr.setContentHandler(dataHandler);
xr.parse(is);

<强> UIXMLHandler.java

public class UIXMLHandler extends DefaultHandler {

    @Override
    public void startElement(String uri, String localName, String qName,Attributes atts){
        //here find the appropriate element, get it's attribute value if exist.
    }

    @Override
    public void endElement(String uri, String localName, String qName){
       //element ends
    }

    @Override
    public void characters(char[] ch, int start, int length){
      String data = new String(ch, start, length);
      data = data.trim();
      //data is the value you are going to use.
    }
}
希望这对你有所帮助。