【问题标题】:Search and display value from XML - Android Java从 XML 中搜索和显示值 - Android Java
【发布时间】:2015-10-24 22:07:14
【问题描述】:

我正在开发一个天气应用程序,它使用下面的代码显示一个城市的最低最高温度。

XML 包含多天的数据。简而言之,我只包括了 2 天的温度。下面的代码提取第一个日期的温度,因此item(0)。如何让它提取当前日期任何日期的数据?我已经知道如何获取当前日期,但我不确定如何使用该日期查询 XML。

//========================= Getting min/max Temperature ==================//
Node nNodem = docm.getElementsByTagName("temperature").item(0);
Element eElementm = (Element) nNodem;
String xmaxtemp = eElementm.getAttribute("max");
String xmintemp = eElementm.getAttribute("min");
//========================= Getting Current Date ========================//
DateFormat dft = new SimpleDateFormat("yyyy-MM-dd");
String t = dft.format(Calendar.getInstance().getTime());

<weatherdata>
  <location>
    <name>London</name>
    <type/>
    <country>GB</country>
    <timezone/>
    <location altitude="0" latitude="51.50853" longitude="-0.12574" geobase="geonames" geobaseid="2643743" />
  </location>
  <credit/>
  <meta>
  <lastupdate/>
  <calctime>0.0249</calctime>
  <nextupdate/>
  </meta>
  <sun rise="2015-10-24T06:40:49" set="2015-10-24T16:47:34" />
  <forecast>
    <time day="2015-10-24">
      <symbol number="500" name="light rain" var="10n" />
      <precipitation/>
      <windDirection deg="310" code="NW" name="Northwest" />
      <windSpeed mps="4.72" name="Gentle Breeze" />
      <temperature day="7.2" min="5.78" max="7.2" night="5.78" eve="7.2" morn="7.2" />
      <pressure unit="hPa" value="1025.83" />
      <humidity value="93" unit="%" />
      <clouds value="clear sky" all="0" unit="%" />
    </time>
    <time day="2015-10-25">
      <symbol number="802" name="scattered clouds" var="03d" />
      <precipitation/>
      <windDirection deg="216" code="SW" name="Southwest" />
      <windSpeed mps="2.86" name="Light breeze" />
      <temperature day="10.83" min="3.35" max="11.15" night="4.67" eve="7.03" morn="3.35" />
      <pressure unit="hPa" value="1033.05" />
      <humidity value="100" unit="%" />
      <clouds value="scattered clouds" all="32" unit="%" />
    </time>
  </forecast>
</weatherdata>
已编辑: 我试过这个,但它不工作:

XPath xPath = XPathFactory.newInstance().newXPath();
String expression = "//time[@day='2015-10-26']";
try {
  NodeList nodeList = (NodeList) xPath.compile(expression).evaluate(doc, XPathConstants.NODESET);
  for (int i = 0; i < nodeList.getLength(); i++) {

    Node nNode = nodeList.item(i);
    if (nNode.getNodeType() == Node.ELEMENT_NODE) {
      Element eElement = (Element) nNode;
      System.out.println("Date: " + eElement.getAttribute("day"));
      System.out.println("Max Temperature: " + eElement.getAttribute("max"));
    }
  }
} catch (XPathExpressionException e) {
  System.out.println(e);
}

显示这个:

Date: 2015-10-26
Max Temperature: 

【问题讨论】:

标签: java android xml xpath


【解决方案1】:

使用 XMLPullParser 解析 xml,然后遍历节点以找到您要查找的内容

【讨论】:

  • 我使用教程编辑了答案并使用了带有表达式的迭代。你能帮我解决我做错了什么吗?
  • 我成功了!谢谢您的帮助!不过,我认为我不需要迭代。
【解决方案2】:

从 NodeList 解析 XML 后创建一个对象列表

然后你可以很容易地根据日期找到任何记录。

【讨论】:

    【解决方案3】:

    我使用在线示例使其工作。这是解决方案:)

    XPath xPath = XPathFactory.newInstance().newXPath();
    String timeStamp = new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime());
    String expression = "//time[@day='" + timeStamp + "']/temperature";
    try {
      NodeList nodeList = (NodeList) xPath.compile(expression).evaluate(docm, XPathConstants.NODESET);
      Node nNodem = nodeList.item(0);
      if (nNodem.getNodeType() == Node.ELEMENT_NODE) {
        Element eElementm = (Element) nNodem;
        double dmax = Math.round(Double.parseDouble(eElementm.getAttribute("max")));
        int dxmax = (int) dmax;
        xmaxtemp = Integer.toString(dxmax);
        double dmin = Math.round(Double.parseDouble(eElementm.getAttribute("min")));
        int dxmin = (int) dmin;
        xmintemp = Integer.toString(dxmin);
      }
    } catch (Exception e) {
      System.out.println(e);
    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-03
      • 1970-01-01
      相关资源
      最近更新 更多