【问题标题】:Parsing http returned xml with java用java解析http返回的xml
【发布时间】:2011-07-06 19:17:17
【问题描述】:

所以我尝试搜索和搜索如何做到这一点,但我一直看到很多复杂的答案来满足我的需要。我基本上是使用 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(如果有人偶然发现这个问题,供参考)

HTTP request for XML file

【问题讨论】:

  • “他们似乎在标签之外获取信息是什么意思?
  • 我的意思是,从我的在线研究中,我注意到很多获取 xml 的方法都是“寻找”外部标签并返回/寻找标签之间的信息。但在我的情况下,标签之间什么都没有,它们是 INSIDE 标签。
  • 你为什么不直接使用 xpath: /eventMetrics/day/@totalCount
  • @vtd-xml-author - Android 是否有 javax.xml.xpath API?

标签: java android xml http flurry


【解决方案1】:

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

【讨论】:

  • org.w3c.dom 上还有信息吗?我有我的文档 doc = db.parse(in);我的 xml 网址在哪里。但我无法从我创建的变量中分支出来。
  • 老兄,来吧。我刚刚给了你一个文档的链接
  • 对不起,我在超链接上完全隔开。我的错。
【解决方案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");
  }
}

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    【解决方案4】:

    我认为最简单的方法是使用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());
                        }
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-13
      • 1970-01-01
      • 1970-01-01
      • 2011-07-25
      • 1970-01-01
      • 2013-08-15
      • 2021-04-06
      • 1970-01-01
      相关资源
      最近更新 更多