У меня есть данные rss xml по ссылке http://itunes.apple.com/us/rss/topsongs/limit=10/xml;
<entry>
<updated>2011-07-06T23:07:06-07:00</updated>
<id>http://itunes.apple.com/us/album/party-rock-anthem-feat-lauren/id440148435?i=440148440&uo=2&uo=2</id>
<title>Party Rock Anthem (feat. Lauren Bennett & GoonRock) - LMFAO</title>
<im:name>Party Rock Anthem (feat. Lauren Bennett & GoonRock)</im:name>
<link rel="alternate" type="text/html" href="http://itunes.apple.com/us/album/party-rock-anthem-feat-lauren/id440148435?i=440148440&uo=2&uo=2"/>
<im:contentType term="Music" label="Music">
<im:contentType term="Track" label="Track"/>
</im:contentType>
<category term="Pop" scheme="http://itunes.apple.com/us/genre/music-pop/id14?uo=2" label="Pop"/>
<link title="Preview" rel="enclosure" type="audio/x-m4a" href="http://a1.mzstatic.com/us/r1000/008/Music/6d/e2/e7/mzi.vmmixjty.aac.p.m4a" im:assetType="preview">
<im:duration>30000</im:duration>
</link>
<im:artist href="http://itunes.apple.com/us/artist/lmfao/id284482668?uo=2">LMFAO</im:artist>
<im:price amount="1.29000" currency="USD">$1.29</im:price>
<im:image height="55">http://a5.mzstatic.com/us/r1000/037/Music/3c/0c/ba/mzi.levtcsmk.55x55-70.jpg
</im:image>
<im:image height="60">http://a2.mzstatic.com/us/r1000/037/Music/3c/0c/ba/mzi.levtcsmk.60x60-50.jpg
</im:image>
<im:image height="170">http://a3.mzstatic.com/us/r1000/037/Music/3c/0c/ba/mzi.levtcsmk.170x170-75.jpg
</im:image>
<rights>2011 Interscope Records</rights>
<im:releaseDate label="June 21, 2011">2011-06-21T00:00:00-07:00</im:releaseDate>
<im:collection>
<im:name>Sorry for Party Rocking (Deluxe Version)</im:name>
<link rel="alternate" type="text/html" href="http://itunes.apple.com/us/album/sorry-for-party-rocking-deluxe/id440148435?uo=2&uo=2"/>
<im:contentType term="Music" label="Music">
<im:contentType term="Album" label="Album"/>
</im:contentType>
</im:collection>
</entry>
Теперь я хотел бы проанализировать этот xml, чтобы получить некоторую полезную информацию, например, URL-адрес изображения для объекта с атрибутом высотыиз "170", заголовок, обновленный на дату с использованием DOM.
Я могу понять, как работает DOM, но при разборе с использованием некоторых методов DOM я даю сбой.Я знаю, что модель DOM в Java почти похожа на получение элемента / атрибутов в javascript.Но так как я не мог понять это, мне трудно решать такие проблемы.
Мой код выглядит так:
URL url = new URL("http://itunes.apple.com/us/rss/topsongs/limit=10/xml");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new InputSource(url.openStream()));
doc.getDocumentElement().normalize();
NodeList nodeList = doc.getElementsByTagName("entry");
for(int i=0; i<nodeList.getLength();i++){
Node node = nodeList.item(i);
Element fstElement = (Element)node;
NodeList title = fstElement.getElementsByTagName("im:image");
Element titleElement = (Element)title.item(2);
Log.d("DOM Element", ((Node)titleElement).getNodeValue());
Log.d("DOM Element", titleElement.getAttribute("height"));
}
Как получить значение узла изображения, Вот.Я мог бы проверить, равен ли атрибут 'height' значению '170', но я не смог получить значение узла здесь.
Просмотр журнала сбоев:
W/dalvikvm( 289): threadid=7: thread exiting with uncaught exception (group=0x4001d800)
E/AndroidRuntime( 289): FATAL EXCEPTION: AsyncTask #1
E/AndroidRuntime( 289): java.lang.RuntimeException: An error occured while executing doInBackground()
E/AndroidRuntime( 289): at android.os.AsyncTask$3.done(AsyncTask.java:200)
E/AndroidRuntime( 289): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
E/AndroidRuntime( 289): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
E/AndroidRuntime( 289): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
E/AndroidRuntime( 289): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
E/AndroidRuntime( 289): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
E/AndroidRuntime( 289): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
E/AndroidRuntime( 289): at java.lang.Thread.run(Thread.java:1096)
E/AndroidRuntime( 289): Caused by: java.lang.NullPointerException: println needs a message
E/AndroidRuntime( 289): at android.util.Log.println_native(Native Method)
E/AndroidRuntime( 289): at android.util.Log.d(Log.java:122)
E/AndroidRuntime( 289): at com.android.DOMParser.DOMParser.ParseXML(DOMParser.java:43)
E/AndroidRuntime( 289): at com.android.DOMParser.DOMParser.doInBackground(DOMParser.java:55)
E/AndroidRuntime( 289): at com.android.DOMParser.DOMParser.doInBackground(DOMParser.java:1)
E/AndroidRuntime( 289): at android.os.AsyncTask$2.call(AsyncTask.java:185)
E/AndroidRuntime( 289): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
E/AndroidRuntime( 289): ... 4 more
W/ActivityManager( 59): Force finishing activity com.android.DOMParser/.MainActivity
I/ARMAssembler( 59): generated scanline__00000077:03515104_00000000_00000000 [ 33 ipp] (47 ins) at [0x356768:0x356824] in 1003390 ns