# Problem beim parsen von Facebook XML



## whitenexx (23. Mai 2011)

Hi zusammen!
Ich programmiere mir gerade einen kleinen Service der mir die Anzahl der Likes, Shares usw. einer URL bei Facebook abholt und speichert.

Leider habe ich ein Problem mit einer NullpointerException und komme nicht auf den Fehler. JDOM kann den DocType des XML auch nicht automatisch feststellen, also versuche ich ihn manuell anzugeben. Ob ich das richtig mache, weiß ich nicht, deswegen frage ich hier ;-)


```
//Holt die aktuellen Zahlen zur URL von Facebook und speichert sie im Model
	public void refreshLikesSharesClicksAndTotal() throws JDOMException, IOException {
		URL fqlURL = new URL("https://api.facebook.com/method/fql.query?query=select  like_count, total_count, share_count, click_count from link_stat where url=\"" + this.url.toString() + "\"");
		Document inputXML = new SAXBuilder().build(fqlURL);
		DocType docType = new DocType("xml", "http://www.w3.org/2001/XMLSchema-instance");
		inputXML.setDocType(docType);
		Element fqlResponse = inputXML.getRootElement().getChild("link_stat");
		Element likes = fqlResponse.getChild("like_count");
		logger.info("Likes: " + likes.getText());
		Element shares = fqlResponse.getChild("share_count");
		Element clicks = fqlResponse.getChild("click_count");
		Element total = fqlResponse.getChild("total_count");
		
		this.likes = Integer.parseInt(likes.getText());
		this.shares = Integer.parseInt(shares.getText());
		this.clicks = Integer.parseInt(clicks.getText());
		this.total = Integer.parseInt(total.getText());
		
	}
```

Mir scheint es so, als wäre da bei Facebook der Doctype falsch!? 
Beispiel für heise.de:
https://api.facebook.com/method/fql...nt from link_stat where url="http://heise.de"

Danke schonmal,
whitenexx


----------



## c_sidi90 (23. Mai 2011)

Um die Attribute auszulesen musst du doch kein DocType setzen, die XML von FB hat doch in dem Fall schon ein.
Also wenn ich dich richtig verstehe müsstest du das ungefähr so machen:

```
URL url = new URL("xxxxxxxxxxxxxxx");
SAXBuilder builder = new SAXBuilder();
InputSource src = new InputSource(URL);
Document doc = builder.build(src);
Element root = doc.getRootElement();
List liste = root.getChildren();

//Dann kannste schonmal die Liste ausgeben und gucken ob die Elemente die du brauchst schon Children des Rootelements sind, falls du es nicht direkt aus der XML lesen kannst.

System.out.println(liste);

//Falls das nicht so ist, einfach wieder aus den Element in der Liste eine neue Liste erstellen. 

//Variante 1
Element likes = list.get(index); //Je nachdem welches das Likes element ist
String likesString = likes.getValue(); //oder getText() wenn es kein Attribute ist sondern nur ein Text.


//Variane 2
String likes = root.getChildren("likes").getText() //Oder getValue();
```

Hoffe hab dich so richtig verstanden.


----------



## whitenexx (23. Mai 2011)

Vielen Dank! Hat super funktioniert!


----------



## c_sidi90 (23. Mai 2011)

freut mich


----------

