从android中的xml读取图片网址

时间:2013-04-15 06:58:25

标签: android xml-parsing urlread

我想从这个网址读取图片。

<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">

  <channel>

    <title>podCast411</title>
    <description>The 411 on podCasts, podCasters and podcasting</description>
    <link>http://www.podcast411.com</link>
     ..
     ..
    <itunes:explicit>No</itunes:explicit>

    <itunes:image href="http://www.podcast411.com/img/411_itunes.jpg"/>
     ..
  </channel>
</rss>

我可以使用以下代码从此Feed中读取标题,说明。

Node results = doc.getDocumentElement();
            Element docElement = doc.getDocumentElement();
            NodeList childNodes = docElement.getChildNodes();
            NodeList itemLinks = docElement.getElementsByTagName("item");
            Log.d("TAG",
                    "Response:" + results.getLastChild() + " "
                            + childNodes.getLength() + "  " + itemLinks.getLength());


            for (int i = 0; i < itemLinks.getLength(); i++) {
                Element el = (Element) itemLinks.item(i);


                NodeList itemTitle = el.getElementsByTagName("title");
                Element itemFirst = (Element) itemTitle.item(0);
                String nTitle = itemFirst.getFirstChild().getNodeValue();


                NodeList itemdesc = el.getElementsByTagName("description");
                Element itemFirstdesc = (Element) itemdesc.item(0);
                String nDesc = stipHtml(itemFirstdesc.getFirstChild().getNodeValue());

}
public String stipHtml(String html) {
            return Html.fromHtml(html).toString();
        }

当我尝试使用相同的代码来读取网址时,它不起作用。以下代码用于阅读imade url:

NodeList itemImage = el.getElementsByTagName("image");
                String imageUrl = null;
                for(i=0;i< itemImage.getLength();i++) {
                    Log.d("TAG", "Length of item is "+ itemImage.getLength());
                    Element itemFirstImage = (Element) itemImage.item(i);
                    NodeList url = itemFirstImage.getElementsByTagName("url");
                    Element link = (Element) url.item(i);
                    imageUrl = stipHtml(link.getFirstChild().getNodeValue());
                }

我的代码有什么问题?

我的logcat是:它显示所有元素。

D/TAG     ( 1901): List Data is called
D/TAG     ( 1901): Temp is created.......
D/TAG     ( 1901): RSS Data: title  : Twelve-die-in-Himachal-road-accident description:Twelve people, all belonging to a village in Himachal Pradesh's Chamba district, were killed when a private vehicle skidded off the road and fell into a 700-metre-deep gorge on Sunday night, police officials said. http://feeds.hindustantimes.com/~r/HT-IndiaSectionPage-Topstories/~3/fUUMziwJedI/story01.htm null
D/TAG     ( 1901): List Data is called
D/TAG     ( 1901): Temp is created.......
D/TAG     ( 1901): RSS Data: title  : Twelve-die-in-Himachal-road-accident description:Twelve people, all belonging to a village in Himachal Pradesh's Chamba district, were killed when a private vehicle skidded off the road and fell into a 700-metre-deep gorge on Sunday night, police officials said. http://feeds.hindustantimes.com/~r/HT-IndiaSectionPage-Topstories/~3/fUUMziwJedI/story01.htm null
D/TAG     ( 1901): List Data is called
D/TAG     ( 1901): Temp is created.......
D/TAG     ( 1901): RSS Data: title  : Twelve-die-in-Himachal-road-accident description:Twelve people, all belonging to a village in Himachal Pradesh's Chamba district, were killed when a private vehicle skidded off the road and fell into a 700-metre-deep gorge on Sunday night, police officials said. http://feeds.hindustantimes.com/~r/HT-IndiaSectionPage-Topstories/~3/fUUMziwJedI/story01.htm null

最后,通过显示以下logcat强制关闭应用程序:

E/dalvikvm( 1901): Out of memory: Heap Size=24263KB, Allocated=23071KB, Bitmap Size=375KB
D/AndroidRuntime( 1901): Shutting down VM
W/dalvikvm( 1901): threadid=1: thread exiting with uncaught exception (group=0x400259f8)
I/dalvikvm-heap( 1901): Clamp target GC heap from 24.311MB to 24.000MB
D/dalvikvm( 1901): GC_FOR_MALLOC freed 18016 objects / 939208 bytes in 141ms
E/AndroidRuntime( 1901): FATAL EXCEPTION: main
E/AndroidRuntime( 1901): java.lang.OutOfMemoryError
E/AndroidRuntime( 1901):    at android.text.SpannableStringBuilder.resizeFor(SpannableStringBuilder.java:137)
E/AndroidRuntime( 1901):    at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:322)
E/AndroidRuntime( 1901):    at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:275)
E/AndroidRuntime( 1901):    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:438)
E/AndroidRuntime( 1901):    at android.text.SpannableStringBuilder.append(SpannableStringBuilder.java:259)
E/AndroidRuntime( 1901):    at android.text.HtmlToSpannedConverter.characters(Html.java:774)
E/AndroidRuntime( 1901):    at org.ccil.cowan.tagsoup.Parser.pcdata(Parser.java:994)
E/AndroidRuntime( 1901):    at org.ccil.cowan.tagsoup.HTMLScanner.save(HTMLScanner.java:614)
E/AndroidRuntime( 1901):    at org.ccil.cowan.tagsoup.HTMLScanner.scan(HTMLScanner.java:557)
E/AndroidRuntime( 1901):    at org.ccil.cowan.tagsoup.Parser.parse(Parser.java:449)
E/AndroidRuntime( 1901):    at android.text.HtmlToSpannedConverter.convert(Html.java:411)
E/AndroidRuntime( 1901):    at android.text.Html.fromHtml(Html.java:139)
E/AndroidRuntime( 1901):    at android.text.Html.fromHtml(Html.java:102)
E/AndroidRuntime( 1901):    at com.mistral.droidcast.SubscriptionActivity$RequestTask.stipHtml(SubscriptionActivity.java:134)
E/AndroidRuntime( 1901):    at com.mistral.droidcast.SubscriptionActivity$RequestTask.onPostExecute(SubscriptionActivity.java:84)
E/AndroidRuntime( 1901):    at com.mistral.droidcast.SubscriptionActivity$RequestTask.onPostExecute(SubscriptionActivity.java:1)
E/AndroidRuntime( 1901):    at android.os.AsyncTask.finish(AsyncTask.java:417)
E/AndroidRuntime( 1901):    at android.os.AsyncTask.access$300(AsyncTask.java:127)
E/AndroidRuntime( 1901):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
E/AndroidRuntime( 1901):    at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 1901):    at android.os.Looper.loop(Looper.java:144)
E/AndroidRuntime( 1901):    at android.app.ActivityThread.main(ActivityThread.java:4937)
E/AndroidRuntime( 1901):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 1901):    at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime( 1901):    at 

    com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    E/AndroidRuntime( 1901):    at 

    com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    E/AndroidRuntime( 1901):    at dalvik.system.NativeStart.main(Native Method)
    W/ActivityManager(  103):   Force finishing activity com.mistral.droidcast/.SubscriptionActivity

请给我任何其他方式来实现它。

1 个答案:

答案 0 :(得分:0)

try {
            InputStream myxml = this.getApplicationContext().getAssets().open("production.xml");
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.parse(myxml);
            doc.getDocumentElement().normalize();
            NodeList nodeList = doc.getElementsByTagName("channel");
            name = new TextView[nodeList.getLength()];

            for (int i = 0; i<nodeList.getLength(); i++) 
            {
                Node node = nodeList.item(i);               
                Element fstElmnt = (Element) node;
                NodeList toList = fstElmnt.getElementsByTagName("itunes:image");
                Element nameElement = (Element) toList.item(0);
                toList = nameElement.getChildNodes();     
                String link = ((Node) toList.item(0)).getNodeValue();
                 // link would be containing url of ur image        
            }


            } catch (Exception e) {
                    System.out.println("XML Pasing Excpetion = " + e);
            }