我几乎是一个关于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个不同的结果,但没有设法理解或找到解决方案。如果你能使用白痴解释,我们将不胜感激。提前谢谢!
答案 0 :(得分:1)
w3c-specs并不总是那么容易理解。可在此处找到更简单的解释Ten minute XPath tutorial
如果您想尝试表达,可以在此处执行:http://www.xpathtester.com/xpath
例如
/channel/item/region/record/reading[@type='NPSI_SO2']/@value
会给你 2 。