在日食中解析 XML



我正在用java编写代码并尝试从此URL解析xml:https://maps.googleapis.com/maps/api/directions/xml?origin=30.606595,33.546753&destination=30.657406,33.712234&sensor=false

此 URL 属于 google API,它采用 2 个点(src、dest),并以 xml 格式返回它们之间的路由。

当我使用 eclipse 调试程序时,它运行完美。 但是当我在没有调试的情况下运行代码时,它会返回错误。(当我在函数末尾放置断点时,"dist"为空,我不知道为什么)知道为什么会这样吗?

代码是

public double calcDist(Point p) //p=the src of the ride (the dest in the calculation)
    {
        String src = Double.toString(this.lati);
        src = src.concat(",");
        src = src.concat(Double.toString(this.longi));
        String dest = Double.toString(p.lati);
        dest = dest.concat(",");
        dest = dest.concat(Double.toString(p.longi));
    String dist=null;
    URL url = null;
    try 
    {
        url = new URL("https://maps.googleapis.com/maps/api/directions/xml?origin="+src+"&destination="+dest+"&sensor=false");
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = null;
        db = dbf.newDocumentBuilder();
        Document doc = null;
        doc = db.parse(new InputSource(url.openStream()));
        doc.getDocumentElement().normalize();
        NodeList nodeList = doc.getElementsByTagName("leg");
        for (int i = 0; i < nodeList.getLength(); i++) 
        {
            Node node = nodeList.item(i);
            NodeList nodeList2 =node.getChildNodes();
            for (int j = 0; j < nodeList2.getLength(); j++) 
            {
                Node child = nodeList2.item(j);
                if (child.getNodeName().contentEquals("distance"))
                {
                    NodeList nodeList3 = child.getChildNodes();
                    for (int p1 = 0; p1 < nodeList3.getLength(); p1++) 
                    {
                        Node child2 = nodeList3.item(p1);
                        if (child2.getNodeName().contentEquals("text"))
                        {
                            Node tmp = child2.getFirstChild();
                            if (tmp != null) 
                                dist = child2.getFirstChild().getNodeValue();
                        }
                    }
                }
            }
        }
    }
    catch (ParserConfigurationException e) 
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    catch (SAXException e) 
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 
    catch (IOException e) 
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    dist = dist.substring(0, dist.length()-3);
    return Double.parseDouble(dist);
}

而不是XML请求json对象(https://maps.googleapis.com/maps/api/directions/json?origin=30.606595,33.546753&destination=30.657406,33.712234&sensor=false),并使用Java库,例如:http://sites.google.com/site/gson/gson-user-guide 将其转换为Java对象并提取所需的任何内容。XML 在您的情况下很繁重。

我不运行代码。但在我看来,在检查 XML 文件后,距离的格式17,0 km xml 之外。在你的子字符串之后,它仍然保持17,0,但在Java和其他语言中浮点数。所以这可能是你的错误。

但有可能,你的解析器出了问题。

您可以使用 Java 的 SAX-Parser API 进行 XML 解析,而不是缓慢且性能低下的 DOM 解析器。

BR

相关内容

  • 没有找到相关文章