在我看来,自动检测xmls doctype存在问题,所以我手动定义了doctype,但问题仍然存在。也许facebooks xml doctype不正确? 这是捕捉方法:
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());
}
德国问题描述: http://www.java-forum.org/xml-co/118648-problem-beim-parsen-facebook-xml.html
感谢您的帮助! whitenexx
答案 0 :(得分:1)
您可以这样做: -
URL url = new URL("https://api.facebook.com/method/fql.query?query=select%20like_count,%20total_count,%20share_count,%20click_count%20from%20link_stat%20where%20url=%22http://heise.de%22");
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true);
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(url.openStream());
XPath xPath = XPathFactory.newInstance().newXPath();
int likeCount = Integer.parseInt(xPath.evaluate("//like_count/text()", doc));
int totalCount = Integer.parseInt(xPath.evaluate("//total_count/text()", doc));
int shareCount = Integer.parseInt(xPath.evaluate("//share_count/text()", doc));
int clickCount = Integer.parseInt(xPath.evaluate("//click_count/text()", doc));
确保使用%20和%22对URL中的空格和双引号进行适当编码。我已经测试了这段代码,它对我有用。
答案 1 :(得分:0)
它对我有用:
public void refreshLikesSharesClicksAndTotal() throws JDOMException, IOException {
URL fqlURL = new URL("https://api.facebook.com/method/fql.query?query=select%20like_count,%20total_count,%20share_count,%20click_count%20from%20link_stat%20where%20url=%22http://heise.de%22");
URLConnection openConnection = fqlURL.openConnection();
String contentType = openConnection.getContentType();
Document inputXML = new SAXBuilder().build(fqlURL);
DocType docType = new DocType("xml", "http://www.w3.org/2001/XMLSchema-instance");
inputXML.setDocType(docType);
Element root = inputXML.getRootElement();
Element fqlResponse = root.getChild("link_stat", root.getNamespace());
Element likes = fqlResponse.getChild("like_count", root.getNamespace());
Element shares = fqlResponse.getChild("share_count", root.getNamespace());
Element clicks = fqlResponse.getChild("click_count", root.getNamespace());
Element total = fqlResponse.getChild("total_count", root.getNamespace());
int alikes = Integer.parseInt(likes.getText());
int ashares = Integer.parseInt(shares.getText());
int aclicks = Integer.parseInt(clicks.getText());
int atotal = Integer.parseInt(total.getText());
}
当你调用getChild和%20&时,我刚刚插入了“root.getNamespace()”查询中的%22