itemprop="text">
I'm using SAX parsing in android. For
below XML:
encoding="utf-8"?>
Game
Analysis
GTA
ABC
Sat, 21 Feb 2012
05:18:23 GMT
url="http://URL.mp3" length="6670315"/>
CoD
XYZ
Sat, 21 Feb 2011
05:18:23 GMT
url="http://URL.mp3" length="6670315"/>
I
need to fetch the first occurance of
(just below
).
Then from every block I again need to extract
&
.
I can fetch the
first
using:
public void
startElement(String uri, String localName, String qName,
Attributes
attributes) throws SAXException {
if (qName.equals("title"))
...
}
But, how should I
fetch the tags inside - block
?
Here is how I've done that with
SAX.
I have modified a bite your XML
file.
XML
file
version="1.0" encoding="utf-8"?>
Game
Analysis
GTA
ABC
Sat, 21 Feb 2012
05:18:23 GMT
url="http://URL.mp3/1" length="6670315"/>
CoD
XYZ
Sat, 21 Feb 2011
05:45:10 GMT
url="http://URL.mp3/2" length="6670345"/>
AtV
fgh
Sat, 21 Feb 2011
06:20:10 GMT
url="http://URL.mp3/3" length="6670364"/>
Game Analysis
2
GTA 2
ABC
2
Sat, 21 Feb 2012 04:18:23
GMT
length="6670315"/>
CoD 2
XYZ 2
Sat, 21 Feb 2011
04:45:10 GMT
url="http://URL.mp3/2/2" length="6670345"/>
AtV
2
fgh
Sat, 21 Feb 2011 05:20:10 GMT
type="audio/mpeg" url="http://URL.mp3/2/3" length="6670364"/>
Entities
Channel
public
class Channel {
private String title;
private ArrayList- alItems;
public
Channel(){}
public String getTitle() {
return
title;
}
public void setTitle(String title)
{
this.title = title;
}
public ArrayList- getAlItems()
{
return alItems;
}
public void
setAlItems(ArrayList- alItems) {
this.alItems =
alItems;
}
}
Enclosure
public
class Enclosure {
private String type;
private URL
url;
private Integer length;
public Enclosure(){}
public String getType() {
return
type;
}
public void setType(String type)
{
this.type = type;
}
public URL getUrl() {
return url;
}
public void setUrl(URL url) {
this.url =
url;
}
public Integer getLength()
{
return length;
}
public void
setLength(Integer length) {
this.length = length;
}
}
Item
public
class Item {
private String title;
private String
description;
private String pubDate;
private Enclosure
enclosure;
public Item(){}
public String
getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return
description;
}
public void
setDescription(String description) {
this.description =
description;
}
public String getPubDate() {
return pubDate;
}
public void setPubDate(String
pubDate) {
this.pubDate = pubDate;
}
public Enclosure getEnclosure() {
return
enclosure;
}
public void setEnclosure(Enclosure
enclosure) {
this.enclosure = enclosure;
}
}
Handler
ChannelHandler
public
class ChannelHandler extends DefaultHandler{
private
ArrayList alChannels;
private Channel channel;
private String reading;
private ArrayList
alItems;
private Item item;
private Enclosure
enclosure;
public ChannelHandler(){
super();
}
@Override
public void
startElement(String uri, String localName, String qName,
Attributes
attributes) throws SAXException {
if(qName.equals("rss")){
alChannels = new ArrayList<>();
}
else if(qName.equals("channel")){
channel = new
Channel();
}
else if(qName.equals("item")){
item = new
Item();
}
else
if(qName.equals("enclosure")){
enclosure = new
Enclosure();
enclosure.setType(attributes.getValue("type"));
try {
enclosure.setUrl(new URL(attributes.getValue("url")));
} catch
(MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
enclosure.setLength(Integer.parseInt(attributes.getValue("length")));
}
}
@Override
public
void endElement(String uri, String localName, String qName)
throws
SAXException {
if(qName.equals("channel")){
channel.setAlItems(alItems);
alChannels.add(channel);
alItems = null;
}
if(qName.equals("title")){
if(alItems == null){
channel.setTitle(reading);
alItems = new
ArrayList<>();
}
else if(item != null) {
item.setTitle(reading);
}
}
else
if(qName.equals("item")){
if(alItems != null){
alItems.add(item);
item = null;
}
}
else if(qName.equals("description")){
item.setDescription(reading);
}
else
if(qName.equals("pubDate")){
item.setPubDate(reading);
}
else if(qName.equals("enclosure")){
item.setEnclosure(enclosure);
}
}
@Override
public void characters(char[] ch, int
start, int length)
throws SAXException {
reading = new String(ch,
start, length);
}
public ArrayList
getAlChannels() {
return alChannels;
}
}
Manager
XMLManager
public
final class XMLManager {
public static
ArrayList getAlChannels(){
ArrayList alChannels
= null;
SAXParserFactory factory = SAXParserFactory.newInstance();
try {
SAXParser parser = factory.newSAXParser();
File file = new
File("D:\\Loic_Workspace\\TestSAX2\\res\\test.xml");
ChannelHandler channelHandler = new ChannelHandler();
parser.parse(file,
channelHandler);
alChannels = channelHandler.getAlChannels();
}
catch (ParserConfigurationException e) {
// TODO Auto-generated catch
block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch
(IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return alChannels;
}
}
The
main
MyMain
public
class MyMain {
/**
* @param args
*/
public static void main(String[] args) {
Enclosure enclosure = null;
for(Channel channel :
XMLManager.getAlChannels()){
System.out.println("Channel title :
"+channel.getTitle());
System.out.println("------------------------");
for(Item
i:channel.getAlItems()){
System.out.println(i.getTitle());
System.out.println(i.getPubDate());
System.out.println("Enclosure :
");
enclosure = i.getEnclosure();
System.out.println(enclosure.getType());
System.out.println(enclosure.getUrl());
System.out.println(enclosure.getLength());
System.out.println("------------------------");
}
}
}
}
Output
in the
console
Channel
title : Game Analysis
------------------------
GTA
Sat, 21
Feb 2012 05:18:23 GMT
Enclosure :
audio/mpeg
http://URL.mp3/1
6670315
------------------------
CoD
Sat,
21 Feb 2011 05:45:10 GMT
Enclosure :
audio/mpeg
http://URL.mp3/2
6670345
------------------------
AtV
Sat,
21 Feb 2011 06:20:10 GMT
Enclosure :
audio/mpeg
http://URL.mp3/3
6670364
------------------------
Channel
title : Game Analysis 2
------------------------
GTA
2
Sat, 21 Feb 2012 04:18:23 GMT
Enclosure :
audio/mpeg
http://URL.mp3/2/1
6670315
------------------------
CoD
2
Sat, 21 Feb 2011 04:45:10 GMT
Enclosure :
audio/mpeg
http://URL.mp3/2/2
6670345
------------------------
AtV
2
Sat, 21 Feb 2011 05:20:10 GMT
Enclosure :
audio/mpeg
http://URL.mp3/2/3
6670364
------------------------
So
it works ;)
No comments:
Post a Comment