现有标记XML Java上的空指针异常

时间:2015-06-18 11:46:33

标签: java xml

我正在使用XML文件here

我有以下代码:

        Document doc = (Document) docBuilder.parse(new URL("http://api.irishrail.ie/realtime/realtime.asmx/getStationDataByNameXML?StationDesc=" + dstation).openStream());

        doc.getDocumentElement().normalize();

        NodeList trains = doc.getElementsByTagName("objStationData");

        for(int i = 0; i<trains.getLength(); i++){

                if(trains.item(i).getAttributes().getNamedItem("Direction").getTextContent().trim().equals("Northbound")){

                    System.out.println(trains.item(i).getAttributes().getNamedItem("Destination").getTextContent().trim());
                }
            }   

我在if语句中得到Null Pointer异常。为什么是这样?对象存在于XML文件中,您可以在上面的链接中看到。

1 个答案:

答案 0 :(得分:2)

这样的事情应该有效。由于您了解XML的结构并且您正在调用getElementsByTagName,因此您知道可以安全地将节点从NodeList转换为Element个对象。

Document doc = (Document) docBuilder.parse(new URL("http://api.irishrail.ie/realtime/realtime.asmx/getStationDataByNameXML?StationDesc=" + dstation).openStream());
doc.getDocumentElement().normalize();
NodeList trains = doc.getElementsByTagName("objStationData");
for(int i = 0; i<trains.getLength(); i++){
    Element objStationDataElement = (Element)trains.item(i);
    Element directionElement = objStationDataElement.getElementsByTagName("Direction").item(0);
    if(directionElement.getTextContent().trim().equals("Northbound")){
        Element destinationElement = (Element)objStationDataElement.getElementsByTagName("Destination").item(0);
        System.out.println(destinationElement.getTextContent().trim());
    }
}