如何解析(然后找到特定的)从API请求收到的XML数据?

时间:2016-02-10 14:11:12

标签: java xml api

我几乎是一个关于XML的初学者,并且只有非常基本的Java知识。我过去一天尝试查找很多东西并尝试了很多代码片段,但还没有找到解决方案,所以我不知道我的搜索条件是错误的,还是我太困惑了。

我有这个URL(http://www.example.com/api/WebAPI/?dataset=wanted_dataset&keyref=12345)来获取XML数据并返回:

<channel>
  <title>PSI Update</title>
  <source>Airviro</source>
 <item>
   <region>...</region>
   <region>...</region>
   <region>...</region>
   <region>
     <id>rEA</id>
     <latitude>1.35735</latitude>
     <longitude>103.94000</longitude>
     <record timestamp="20160210160000">
       <reading type="NPSI" value="57"/>
       <reading type="NPSI_PM25_3HR" value="56"/>
       <reading type="NO2_1HR_MAX" value="5"/>
       <reading type="PM10_24HR" value="32"/>
       <reading type="PM25_24HR" value="18"/>
       <reading type="SO2_24HR" value="4"/>
       <reading type="CO_8HR_MAX" value="0.53"/>
       <reading type="O3_8HR_MAX" value="31"/>
       <reading type="NPSI_CO" value="5"/>
       <reading type="NPSI_O3" value="13"/>
       <reading type="NPSI_PM10" value="32"/>
       <reading type="NPSI_PM25" value="57"/>
       <reading type="NPSI_SO2" value="2"/>
   </record>
 </region>
<region>...</region>
<region>...</region>

 

到目前为止,这是我的代码:

public class HazeCheck {

    public void getHazeLevel() throws Exception{            
        URL myUrl = new URL("http://www.example.com/api/WebAPI/?dataset=wanted_dataset&keyref=12345");
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document doc = builder.parse(myUrl.openStream());
        XPathFactory xPathfactory = XPathFactory.newInstance();
        XPath xpath = xPathfactory.newXPath();
        XPathExpression expr = xpath.compile("I have no idea what I should put here");
        String npsiValue = expr.evaluate(doc, XPathConstants.STRING).toString();
        System.out.println("NPSI: " + npsiValue );
    }
}

我正在尝试在控制台上显示[reading type =“NPSI”value =“57”]内的值。

如果之前发布过任何类似的问题,我真的很抱歉,但我已经查看了至少20个不同的结果,但没有设法理解或找到解决方案。如果你能使用白痴解释,我们将不胜感激。提前谢谢!

1 个答案:

答案 0 :(得分:1)

w3c-specs并不总是那么容易理解。可在此处找到更简单的解释Ten minute XPath tutorial

如果您想尝试表达,可以在此处执行:http://www.xpathtester.com/xpath

例如

/channel/item/region/record/reading[@type='NPSI_SO2']/@value

会给你 2