1

所以我试着搜索和搜索如何做到这一点,但我一直看到很多复杂的答案来满足我的需要。我基本上使用 Flurry Analytics API 从 HTTP 请求返回一些 xml 代码,这就是它返回的内容。

<?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 数字,它是Java 的3 到一个int 或字符串。我查看了不同的 DOM 和 SAX 方法,它们似乎在标签之外获取信息。有没有办法我可以在标签中获取 totalCount ?

谢谢,

更新

我找到了这个网址 - http://www.androidpeople.com/android-xml-parsing-tutorial-%E2%80%93-using-domparser/

这有助于我考虑它在android中。但我感谢所有回应帮助我的人。我检查了每个答案,这对了解正在发生的事情有所帮助。但是,现在我似乎无法从我的 url 中获取 xml,因为它首先需要一个 HTTP 帖子才能获取 xml。当它从我的 url 中获取 xml 时,它只是说找不到文件。

更新 2

我现在把它全部整理好并从 Flurry Analytics 获取 xml(如果有人偶然发现这个问题,供参考)

对 XML 文件的 HTTP 请求

4

4 回答 4

4

如果您使用的是 SAX 处理程序,请覆盖 startElement 回调方法以访问属性:

public void startElement (String uri, String name, String qName, Attributes atts)
{
    if("day".equals (qName)) {
      String total = attrs.getValue("totalCount");
    }
}
于 2011-03-01T20:40:14.737 回答
4

totalCount就是我们所说的属性。如果您使用org.w3c.domAPI,则在适当的元素上调用getAttribute("totalCount") 。

于 2011-03-01T20:30:50.240 回答
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");
  }
}
于 2011-03-01T20:37:14.947 回答
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());
                    }
        }
    }
于 2011-03-01T21:42:09.200 回答