Get values from a XML contained in a String - android

I have a String variable containing an XML:
String xml = "<?xml version="1.0" encoding="utf-8" standalone="yes"?><CourtactSioux><ListeContact><IdContactClient>212</IdContactClient><DateContact>25/06/2012 08:09</DateContact><TypeForm>STANDARD</TypeForm><Foyer>2</Foyer><Civilite>M</Civilite><Nom>TEST</Nom><Prenom>JULIEN</Prenom><NomJeuneFille></NomJeuneFille></ListeContact></CourtactSioux>"
And I want to take values from this XML, how to do ?
For exemple: get "Civilite" value.
I tried this:
String xml = cn.getXml();
Integer demandeId = cn.getID();
XMLParser parser = new XMLParser();
Document doc = parser.getDomElement(xml); // getting DOM element
NodeList nl = doc.getElementsByTagName(KEY_ITEM);
// looping through all item nodes <item>
for (int i = 0; i < nl.getLength(); i++) {
Element e = (Element) nl.item(i);
idApplication = parser.getValue(e, IdApplication);
idContactClient = parser.getValue(e, IdContactClient);
logement = parser.getValue(e, Logement);
typeForm = parser.getValue(e, TypeForm);
}
id = idApplication + idContactClient;
Product product = new Product()
.setId(id)
.setName(logement)
.setCategory(typeForm)
.setPrice(1)
.setQuantity(1);
ProductAction productAction = new ProductAction(ProductAction.ACTION_PURCHASE)
.setTransactionId(id)
.setTransactionAffiliation("Solutis")
.setTransactionRevenue(1);
HitBuilders.ScreenViewBuilder builder = new HitBuilders.ScreenViewBuilder()
.addProduct(product)
.setProductAction(productAction);
Tracker t = ((App) getApplication()).getTracker();
t.setScreenName("transaction");
t.send(builder.build());
}
It's work, get attention on the aprent node of your xml

There are several ways of parsing XML in android. You could use XMLReader.parse(InputSource) by wrapping the string in a reader, as shown here
Check the Parsing XML Data part of Android Developers site for more information.

Related

Web service with NFC

I have a problem when I want to make a webservice stops the app is not that any ideas?
private String dumpTagData(Parcelable p) {
StringBuilder sb = new StringBuilder();
Tag tag = (Tag) p;
byte[] id = tag.getId();
sb.append("ID Producto:").append(getDec(id)).append("\n");
ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();
XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl(URL); // getting XML
Document doc = parser.getDomElement(xml); // getting DOM element
NodeList nl = doc.getElementsByTagName(KEY_ITEM);
// looping through all item nodes <item>
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
Element e = (Element) nl.item(0);
// adding each child node to HashMap key => value
sb.append("Nombre:").append(parser.getValue(e, KEY_NAME)).append("\n");
sb.append("Costo:").append(parser.getValue(e, KEY_COST)).append("\n");
sb.append("Descripción:").append(parser.getValue(e, KEY_DESC)).append("\n");
sb.delete(sb.length() - 2, sb.length());
return sb.toString();
}
usually you don't want to let a server stop a client app, when it comes to webservices. It is much like a TV-station shutting down your television.

Android parse a very simple XML Array

This might sound dumb, but I just need the help with the logic,
I have this very simple XML array:
<plist version="1.0">
<array>
<string>Lisa Jackson</string>
<string>Elisabeth Hartmann</string>
<string>C. J. Sansom</string>
<string>Irmengard Gabler</string>
<string>Oliver Pötzsch</string>
<string>Ulla Illerhaus</string>
<string>Christopher J. Sansom</string>
<string>Nina Blazon</string>
<string>Nicholas Lessing</string>
<string>Johannes Steck</string>
<string>Peter Kaempfe</string>
<string>Dimeter Inkiow</string>
<string>Barbara Sher</string>
<string>Ulrike Hübschmann</string>
<string>Otfried Preußler</string>
<string>Ulla Illerhaus</string>
<string>Annette Kurth</string>
</array>
</plist>
but when I try to parse it this way:
static final String KEY_ITEM = "string";
ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();
XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl(URL); // getting XML
Document doc = parser.getDomElement(xml); // getting DOM element
NodeList nl = doc.getElementsByTagName(KEY_ITEM);
for (int i = 0; i < nl.getLength(); i++) {
HashMap<String, String> map = new HashMap<String, String>();
Element e = (Element) nl.item(i);
map.put(KEY_ITEM, parser.getValue(e, KEY_ITEM));
menuItems.add(map);
}
It displays the list based on the number of the given (17 list items) on the XML file, but it doesn't display any of the content, like 'Lisa Jackson', 'Elisabeth Hartmann', etc.
How can I resolve this?
element.getTextContent();
This will get the text value needed.
OR
for (int in = 0; in < numberOfChildren; in++) {
Node node = nl.item(in);
Log.d("skt",node.getNodeName() + " = " + node.getTextContent());
//node.getTextContent() has the text. Add it to map
}

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 get attibute and values in xml parsing in android?

I have a xml file having a format of
<question_choices>
<question id="499">What do you call a chicken with bad sunburn</question>
<choices1 id="2231">Burned Chicken</choices1>
<choices2 id="2230">Fried Chicken</choices2>
<choices3 id="2232">Dead Chicken</choices3>
<choices_answer>Fried Chicken</choices_answer>
</question_choices>
I have to get both the id and the value during parsing.Also I have set these options in 3 different buttons.So when I click these choice I have to get the value and corresponding id also have to be saved.I tried to use getAttributes() but I dont know where and how to use.So it was not successful.
final XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl(URL); // getting XML
Document doc = parser.getDomElement(xml); // getting DOM element
final NodeList nl = doc.getElementsByTagName(KEY_QUESTION);
// looping through all item nodes <item>
for(int j=0;j<nl.getLength();j++)
{
Element e = (Element) nl.item(j);
listnew[j]=parser.getValue(e,KEY_QUEST);
options1[j]= parser.getValue(e, KEY_CHOICE1);
options2[j]= parser.getValue(e, KEY_CHOICE2);
options3[j]= parser.getValue(e, KEY_CHOICE3);
}
TextView question = (TextView)findViewById(R.id.question);
question.setText(listnew[x]);
opt1 = (Button)findViewById(R.id.opt1);
opt1.setText(options1[x]);
opt1.setOnClickListener(myOptionOnClickListener);
opt2 = (Button)findViewById(R.id.opt2);
opt2.setText(options2[x]);
opt2.setOnClickListener(myOptionOnClickListener);
opt3 = (Button)findViewById(R.id.opt3);
opt3.setText(options3[x]);
opt3.setOnClickListener(myOptionOnClickListener);
x++;
}
I'm using a DOM parser for parsing.The option what is clicked have to be saved.How should I do this?
Try this:
Document doc = parser.getDomElement(xml);
String idQuestion = doc.getElementsByTagName("question").item(0)
.getAttributes().getNamedItem("id").getNodeValue();
String idChoise1 = doc.getElementsByTagName("choices1 ").item(0)
.getAttributes().getNamedItem("id").getNodeValue();
...

How to parse XML (especific structure) in Android?

I need to parse a specific part of an XML obtained from a http request but I do not know how to do it!
I have the following XML structure being returned:
<categorias type="array">
<categoria>
<nome>
Alimentação
</nome>
<idcategoria>
5
</idcategoria>
<subcategorias>
<subcategoria>
<nome>
Todos
</nome>
<id>
5
</id>
</subcategoria>
</subcategorias>
</categoria>
</categorias>
I need to parse the data inside the subcategorias
tag because with the code I have now, I get only the upper tags, like
nome and idcategoria from the root tag categoria.
I've created a NodeList inside the for loop but it return all the subcategoria tags in the Document. And I need to get only the ones inside a unique categoria tag.
Here's the code I have now:
menuItems = new ArrayList<HashMap<String, String>>();
XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl(URL); // getting XML
Document doc = parser.getDomElement(xml); // getting DOM element
NodeList nl = doc.getElementsByTagName(KEY_ITEM);
// looping through all item nodes <item>
for (int i = 0; i < nl.getLength(); i++) {
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
Element e = (Element) nl.item(i);
// adding each child node to HashMap key => value
map.put(KEY_ID, parser.getValue(e, KEY_ID));
map.put(KEY_NAME, parser.getValue(e, KEY_NAME));
// adding HashList to ArrayList
menuItems.add(map);
}
Can someone help me on this!?
Thanks in advance!
Have a look at this official document of Android which describe XMLPullParser.
You have to implement your logic according to your XML structure.
Aside from XMLPullParser, another option for parsing XML is to use the Simple XML library. It will allow you to easily deserialize that XML into an object which you can manipulate however you wish. It would be possible for you to ignore all other child elements in categoria and just capture subcategorias by using loose object mapping. Check the Simple Framework documentation for more information.
#Android Coader is right, "You have to implement your logic according to your XML structure"
Why do you have a KEY_ITEM, when there are no "item" tags in your XML? You need to specify in the code which tags you want to retrieve. For example, if you define a KEY_SUBCATEGORIA = "subcategoria", then to get all subcategory nodes you can do
NodeList nl = doc.getElementsByTagName(KEY_SUBCATEGORIA);
Then you should navigate through each node, pulling out the name and id's as you are doing now.
I got it!
I used only the same kind of structure I had before!
I added this code inside the for loop I had:
NodeList nlSubcategorias = e.getElementsByTagName("subcategoria");
ArrayList<HashMap<String, String>> subcategorias = new ArrayList<HashMap<String, String>>();
for (int j = 0; j < nlSubcategorias.getLength(); j++) {
HashMap<String, String> mapSub = new HashMap<String, String>();
Element eSub = (Element)nlSubcategorias.item(j);
mapSub.put(KEY_ID_SUB, parser.getValue(eSub, KEY_ID_SUB));
mapSub.put(KEY_NAME_SUB, parser.getValue(eSub, KEY_NAME_SUB));
subcategorias.add(mapSub);
System.out.println("subcategorias: " + subcategorias.get(j).get(KEY_NAME_SUB));
}
subcategoriasItems.add(subcategorias);

Categories

Resources