XML Parsing For News Application - android

I have create news application rss feed on xml parsing for collage project
this is xml http://goo.gl/X8tIr1 so any one guide me for build that application or give code to help for collage project
Can Anyone give me the whole code

Go through Creating-a-simple-rss-application-in-android. This should get you started.

I'm giving you how to XML PArsing works in doInBackground. Try like this :
DOMParser dParser = new DOMParser();
String abc = dParser.getXmlFromUrl(params[0]);
Document doc = dParser.getDocElement(abc);
NodeList n1 = doc.getElementsByTagName("channel");
for (int i = 0; i < n1.getLength(); i++) {
Element e = (Element) n1.item(i);
NodeList nl1 = e.getElementsByTagName("item");
for (int j = 0; j < nl1.getLength(); j++) {
Element e1 = (Element) nl1.item(j);
NodeList ntitle = e1.getElementsByTagName(TITLE);
NodeList ndate = e1.getElementsByTagName(PUBDATE);
NodeList ndesc = e1.getElementsByTagName(DESCRIPTION);
for (int k = 0; k < n1.getLength(); k++) {
Element e2 = (Element) ntitle.item(k);
Element e3 = (Element) ndate.item(k);
Element e4 = (Element) ndesc.item(k);
Pojo pojo = new Pojo();
pojo.setTitle(getCharacterDataFromElement(e2));
pojo.setPubdate(getCharacterDataFromElement(e3));
pojo.setDescription(getCharacterDataFromElement(e4));
itemList.add(pojo);
}
}
}
return null;

Related

Android XML parsing Not getting out put

How to parse xml like this (A XML which is having an inner tag).I am not getting simpleChoice Node when I try to print it it showing always blank can any one help me.
<itemBody>
<p>Look at the text in the picture.</p>
<p>
<img src="images/sign.png" alt="NEVER LEAVE LUGGAGE UNATTENDED"/>
</p>
<choiceInteraction responseIdentifier="RESPONSE" shuffle="false" maxChoices="1">
<prompt>What does it say?</prompt>
<simpleChoice identifier="ChoiceA">You must stay with your luggage at all times.</simpleChoice>
<simpleChoice identifier="ChoiceB">Do not let someone else look after your luggage.</simpleChoice>
<simpleChoice identifier="ChoiceC">Remember your luggage when you leave.</simpleChoice>
</choiceInteraction>
</itemBody>
What I had tried -
NodeList nodeList = doc.getElementsByTagName("itemBody");
XMLParser parser = new XMLParser();
for (int i = 0; i < nodeList.getLength(); i++)
{
Element e = (Element) nodeList.item(i);
Log.i("TAG","<p>: " + parser.getValue(e, "p"));
//Log.i("TAG","Count: " + parser.getValue(e, "choiceInteraction"));
//Log.i("TAG","Count: " + parser.getValue(e, "p"));
}
NodeList nodeChoiceInteractionList = doc.getElementsByTagName("choiceInteraction");
for (int j = 0; j < nodeChoiceInteractionList.getLength(); j++)
{
Element eChoiceInteractionList = (Element) nodeChoiceInteractionList.item(j);
Log.i("TAG","<prompt>: " + parser.getValue(eChoiceInteractionList, "prompt"));
}
NodeList simpleChoiceList = doc.getElementsByTagName("simpleChoice");
for (int j = 0; j < simpleChoiceList.getLength(); j++)
{
Element eSimpleChoice = (Element) simpleChoiceList.item(j);
Log.i("TAG","<simpleChoice>: " + parser.getValue(eSimpleChoice, "simpleChoice"));
}
You are looking for like a child of ItemBody, so you need to iterate over the nodeChoiceInteractionList looking for the simpleChoice node, like you do with the prompt node.
Try also to print in your log the times this codes iterates to give you an idea
for (int j = 0; j < nodeChoiceInteractionList.getLength(); j++)
{
Element eChoiceInteractionList = (Element) nodeChoiceInteractionList.item(j);
Log.i("TAG","<prompt>: " + parser.getValue(eChoiceInteractionList, "prompt"));
>>Log.i("TAG","<simpleChoice>: " + parser.getValue(eSimpleChoice, "simpleChoice"));
>>Log.d("Iterate Number",j);
}

Parse two elements with same name android

I'm a bit new to XML and Android development... I've encountered this issue where I need to parse an XML where the elements are the same and include that with the overall element. It's a bit hard to explain, see code below:
<tns:camera>
<tns:congestionLocations>
<tns:congestion>Free Flow</tns:congestion>
<tns:direction>Eastbound</tns:direction>
</tns:congestionLocations>
<tns:congestionLocations>
<tns:congestion>Free Flow</tns:congestion>
<tns:direction>Westbound</tns:direction>
</tns:congestionLocations>
<tns:description>Bond St looking east</tns:description>
<tns:direction>Eastbound</tns:direction>
<tns:group>SH16-North-Western</tns:group>
<tns:lat>-36.869</tns:lat>
<tns:lon>174.746</tns:lon>
<tns:name>SH16 1 Bond St</tns:name>
<tns:viewUrl>http://www.trafficnz.info/camera/view/130</tns:viewUrl>
</tns:camera>
Basically, I need to parse the overall element (tns:camera) and include the congestion locations (seperated from each other obviously), but within the same class as i will be using all of them in a listview...
How would I achieve this?
At present, I am using the Pull Parser, and parsing it into a class object
PullParser code:
case XmlPullParser.END_TAG:
if (tagname.equalsIgnoreCase(KEY_SITE)) {current Site
CameraSites.add(curCameraClass);
} else if (tagname.equalsIgnoreCase(KEY_DESCRIPTION)) {
curCameraClass.setDescription(curText);
}else if (tagname.equalsIgnoreCase(KEY_NAME)) {
curCameraClass.setName(curText);
}
break;
Kind Regards!
Try this..
NodeList nodeList = doc.getElementsByTagName("tns:camera");
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
Element fstElmnt = (Element) node;
NodeList nameList = fstElmnt.getElementsByTagName("tns:group");
Element nameElement = (Element) nameList.item(0);
nameList = nameElement.getChildNodes();
System.out.println("tns:group : "+((Node) nameList.item(0)).getNodeValue());
Element fstElmnt1 = (Element) node;
NodeList nameList1 = fstElmnt1.getElementsByTagName("tns:viewUrl");
Element nameElement1 = (Element) nameList1.item(0);
nameList1 = nameElement1.getChildNodes();
System.out.println("tns:viewUrl : "+ ((Node) nameList1.item(0)).getNodeValue());
//same as use to all tns:description,tns:direction and tns:lat etc.,
if(node.getNodeType() == Node.ELEMENT_NODE)
{
Element e = (Element) node;
NodeList resultNodeList = e.getElementsByTagName("tns:congestionLocations");
int resultNodeListSize = resultNodeList.getLength();
for(int j = 0 ; j < resultNodeListSize ; j++ )
{
Node resultNode = resultNodeList.item(j);
if(resultNode.getNodeType() == Node.ELEMENT_NODE)
{
Element fstElmnt2 = (Element) resultNode;
NodeList nameList2 = fstElmnt2.getElementsByTagName("tns:congestion");
Element nameElement2 = (Element) nameList2.item(0);
nameList2 = nameElement2.getChildNodes();
Log.v("tns:congestion", ""+((Node) nameList2.item(0)).getNodeValue());
Element fstElmnt3 = (Element) resultNode;
NodeList nameList3 = fstElmnt3.getElementsByTagName("tns:direction");
Element nameElement3 = (Element) nameList3.item(0);
nameList3 = nameElement3.getChildNodes();
Log.v("tns:direction--", ""+((Node) nameList3.item(0)).getNodeValue());
}
}
}
}
You can you SAXParser to parse the xml. Hope the following links will be helpful:
developersite
basic tutorial

Parse XML data from url using DOM Parser

I want to parse xml file from url :
http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&artist=cher&api_key=5d6ce941674603e4bb75cfad6cfa13b7
I want to parse following tags of the file :
<artist>
<name>Cher</name>
<image size="medium">http://userserve-ak.last.fm/serve/64/62286415.png</image>
</artist>
But i don't know how to get the value of these two tags only.
I have tried the example code from
http://www.androidhive.info/2011/11/android-xml-parsing-tutorial/
But it does not showing to parse same tag having different attribute value.
Can anyone guide me how this is done?
Thanx in advance.
from the link you provided, I have just extract a small part :
XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl(URL); // getting XML
Document doc = parser.getDomElement(xml); // getting DOM element
NodeList nl = doc.getElementsByTagName("artist");
// looping through all item nodes <artist>
for (int i = 0; i < nl.getLength(); i++) {
Element e = (Element) nl.item(i);
String name = parser.getValue(e, "name"));
String image = parser.getValue(e, "image"));
//if you want the artist 'Cher' sigh ;)
if (name.equals("Cher")){
//do whatever you want
}
}
Thankx. I solved my problem from this url :
Getting element using attribute
if(str.equals("image"))
{
n = item.getElementsByTagName(str);
for (int i = 0; i < n.getLength(); i++) {
Node subNode = n.item(i);
if (subNode.hasAttributes()) {
NamedNodeMap nnm = subNode.getAttributes();
for (int j = 0; j < nnm.getLength(); j++) {
Node attrNode = nnm.item(j);
if (attrNode.getNodeType() == Node.ATTRIBUTE_NODE) {
Attr attribute = (Attr) attrNode;
if( attribute.getValue().equals("medium"))
{
return this.getElementValue(n.item(i));
}
}
}
}
}
}

How to parse this xml file?

Hi i want to parse this
<entry>
<id>http://306721</id>
<title type='text'>MY New</title>
<photo:id>513306721</gphoto:id>
<photo:name>MYNew</gphoto:name>
<photo:numphotos>9</gphoto:numphotos>
<media:group>
<media:content url='http:Ya4MIz9Y/MYNew.jpg' medium='image' type='image/jpeg' />
<media:keywords />
<media:thumbnail url='htt0-c/MYNew.jpg' height='160' width='160' />
<media:title type='plain'>MY New</media:title>
</media:group>
</entry>
i am able to parsing this file, and also able to read some values from the above xml document like this
Document doc = db.parse(is);
NodeList entries = doc.getElementsByTagName("entry");
for (int i = 0; i < entries.getLength(); i++) {
Element element = (Element) entries.item(i);
albumIds.add(getCharacterDataFromElement((Element) element
.getElementsByTagName("photo:id").item(0)));
}
in the above code i am reading gphoto:id like this i am reading photo:name and photo:numphotos.
Now i want to read url from the media:thumbnail those are available in the media:group.. Can any one help me on this how to read this.
Please see below link of my SO Question, it will solve your problem and if you have any query regarding that then tell me.
XML Parsing Using DOM Parser
Add those values in to object(using java pojo) and add that object into ArrayList
try to use Below Code. Hope it will help you.
Document doc = db.parse(is);
NodeList entries = doc.getElementsByTagName("entry");
for (int i = 0; i < entries.getLength(); i++) {
Element element = (Element) entries.item(i);
albumIds.add(getCharacterDataFromElement((Element) element
.getElementsByTagName("gphoto:id").item(0)));
NodeList nodelist_group = doc.getElementsByTagName("media:group");
for (int j = 0; j < nodelist_group.getLength(); j++) {
Element element = (Element) nodelist_group.item(j);
NodeList nodelist_content = doc.getElementsByTagName("media:content");
URLS.add(nodelist_content.getAttribute('url'))); }}

How to get all the values from the child nodes in android 4.0?

I would like to list all the values of the tag inside in android 4.0 as of now I am able to get only one value I have added the snippet which I am using right now & also the xml below.Please help with the this with snippet or example.Thanks a lot.
NodeList nodes = doc.getElementsByTagName("month");
for (int i = 0; i < nodes.getLength(); i++)
{
Element e = (Element) nodes.item(i);
stock_list.add(getValue(e, "month"));
}
Here is my xml
The nodeValue of an XML Element is null by definition. Thus, you can either
query the element's children for the Text node containing the actual contents, or
simply use e.getTextContent() to retrieve the text content of the XML element.
Try this code i was having the same problem and solved it this way..
ArrayList<HashMap<String, String>> stock_list = new ArrayList<HashMap<String, String>>();
NodeList nodes = doc.getElementsByTagName("month");
for (int i = 0; i < nodes.getLength(); i++) {
HashMap<String, String> map = new HashMap<String, String>();
Node name = nodes.item(i);
NodeList month = name.getChildNodes();
map.put("months", ((Node) month.item(0)).getNodeValue());
stock_list.add(map);
}

Categories

Resources