2011-03-01 88 views
1

所以我試過搜索和搜索如何做到這一點,但我不斷看到我需要的很多複雜的答案。我基本上使用Flurry Analytics API從HTTP請求返回一些xml代碼,這就是它返回的結果。解析http返回的XML與java

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<eventMetrics type="Event" startDate="2011-2-28" eventName="Tip Calculated" endDate="2011-3-1" version="1.0" generatedDate="3/1/11 11:32 AM"> 
<day uniqueUsers="1" totalSessions="24" totalCount="3" date="2011-02-28"/> 
<day uniqueUsers="0" totalSessions="0" totalCount="0" date="2011-03-01"/> 
<parameters/> 
</eventMetrics> 

我想要得到的就是totalCount數字是3與Java的int或字符串。我查看了不同的DOM和SAX方法,他們似乎在標籤之外獲取信息。有什麼方法可以在標籤內抓取totalCount?

感謝,

更新

我發現這個網址 - http://www.androidpeople.com/android-xml-parsing-tutorial-%E2%80%93-using-domparser/

,幫助我考慮到這是在android系統。但是,我感謝所有迴應幫助我的人。我檢查了每一個答案,並且幫助瞭解了發生了什麼。但是,現在我似乎無法從我的url中獲取xml,因爲它需要先發送一個HTTP帖子才能獲取xml。當它從我的網址抓取XML時,它只是說沒有找到文件。

更新2

我把一切都整理出來,現在讀它,並從Flurry的分析得到的XML(僅供參考,如果有人絆倒在這個問題)

HTTP request for XML file

+0

喲意味着什麼?「他們似乎搶在標籤之外的信息?」 – ajuc 2011-03-01 20:27:46

+0

我只是想說,從我的在線研究中我注意到許多抓取xml的方法是「尋找」外部標籤並返回/尋找標籤之間的信息。但在我的情況下,我沒有標籤之間的任何內容,它們是INSIDE標籤。 – rwarner 2011-03-01 20:34:19

+0

爲什麼不只是使用xpath:/ eventMetrics/day/@ totalCount – 2011-03-01 21:29:45

回答

4

totalCount被我們稱之爲屬性。如果您使用的是org.w3c.dom API,請在相應的元素上調用getAttribute("totalCount")

+0

org.w3c.dom是否有更多信息?我有我的文檔doc = db.parse(in);在哪裏是我的XML網址。但是我無法從創建的變量中分支出來。 – rwarner 2011-03-01 20:48:32

+1

夥計,來吧。我只是給了你一個鏈接到文檔。 – 2011-03-01 21:06:32

+0

對不起,我完全在超鏈接上。我的錯。 – rwarner 2011-03-01 22:25:32

2

一個JDOM的例子。請注意使用SAXBuilder加載文檔。

URL httpSource = new URL("some url string"); 
Document document = SAXBuilder.build(httpSource); 
List<?> elements = document.getDescendants(new KeyFilter()); 

for (Element e : elements) { 
    //do something more useful with it than this 
    String total = (Element) e.getAttributeValue("totalCount"); 
} 

class KeyFilter implements Filter { 
    public boolean matches (Object obj) { 
    return (Element) obj.getName().equals("key"); 
    } 
} 
4

如果您使用的是SAX處理程序,覆蓋startElement回調的方法來訪問屬性:

public void startElement (String uri, String name, String qName, Attributes atts) 
{ 
    if("day".equals (qName)) { 
     String total = attrs.getValue("totalCount"); 
    } 
} 
+1

@kentoe - 查看我對前一個問題的回答之一,瞭解如何創建XMLReader:http://stackoverflow.com/questions/3405702/using-sax-to-parse-common-xml-elements/3409270# 3409270 – 2011-03-01 21:05:27

0

我認爲,最簡單的方法是使用XPath,下面是基於vtd-爲例XML。

import com.ximpleware.*; 
    public class test { 
     public static void main(String[] args) throws Exception { 
      String xpathExpr = "/eventMetrics/day/@totalCount"; 
      VTDGen vg = new VTDGen(); 
      int i = -1; 

      if (vg.parseHttpUrl("http://localhost/test.xml", true)) { 
       VTDNav vn = vg.getNav(); 
       AutoPilot ap = new AutoPilot(); 
       ap.selectXPath(xpathExpr); 
       ap.bind(vn); 
       System.out.println("total count "+(int)ap.evalXPathtoDouble()); 
        } 
     } 
    }