0

入力ストリームからxmlを読み取るこのプログラムがあり、これはinputStreamの結果であるxmlです

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
    <GetRouteSummaryForStopResponse xmlns="http://octranspo.com">
        <GetRouteSummaryForStopResult>
            <StopNo xmlns="http://tempuri.org/">string</StopNo>
            <StopDescription 
             xmlns="http://tempuri.org/">string</StopDescription>
            <Error xmlns="http://tempuri.org/">string</Error>
            <Routes xmlns="http://tempuri.org/">
                <Route>
                    <RouteNo>int</RouteNo>
                    <DirectionID>int</DirectionID>
                    <Direction>string</Direction>
                    <RouteHeading>string</RouteHeading>
                </Route>
                <Route>
                    <RouteNo>int</RouteNo>
                    <DirectionID>int</DirectionID>
                    <Direction>THIS IS A STRING</Direction>
                    <RouteHeading>string</RouteHeading>
                </Route>
            </Routes>
        </GetRouteSummaryForStopResult>
    </GetRouteSummaryForStopResponse>
</soap:Body>
</soap:Envelope>

xml にある方向情報を取得するためにどこから始めればよいかわかりません。

public String HTTPrequest(String stopNo){
    String parameterURL = "appID="+this.appId+"&apiKey="+this.AppKey+"&routeNo=1&stopNo="+stopNo+"";    
    URL url;
    HttpURLConnection connection = null;
    try {
        url = new URL(this.requestGetRouteSummaryForStop);
        connection = (HttpURLConnection) url.openConnection();
        connection.setDoOutput(true);
        connection.setDoInput(true);
        connection.setInstanceFollowRedirects(false); 
        connection.setRequestMethod("POST"); 
        connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
        connection.setRequestProperty("charset", "utf-8");
        connection.setRequestProperty("Content-Length", "" + Integer.toString(parameterURL.getBytes().length));
        connection.setUseCaches (false);

        //send request
         DataOutputStream wr = new DataOutputStream (
                  connection.getOutputStream ());
                  wr.writeBytes (parameterURL);
                  wr.flush ();
                  wr.close ();

        //Get Response  

          InputStream is = connection.getInputStream();
          BufferedReader rd = new BufferedReader(new InputStreamReader(is));
          String line;
          StringBuffer response = new StringBuffer(); 
          while((line = rd.readLine()) != null) {
            response.append(line);
            response.append('\r');
          }
          rd.close();
          System.out.print(response.toString());
      return response.toString();
    } catch (Exception e) {
        System.out.print("ERROR: ");
        e.printStackTrace();
        return null;
    }finally{
        if(connection != null){
            connection.disconnect();
        }
    }
}


public void parseXmlData(String response){
    InputSource xmlSource = new InputSource(new StringReader(response));
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    try {
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document document = db.parse(xmlSource);

        XPathFactory xPathFactory = XPathFactory.newInstance();
        XPath xPath = xPathFactory.newXPath();

        String routeHeading = xPath.evaluate("/GetRouteSummaryForStopResponse/GetRouteSummaryForStopResult/Routes/Route/Direction",document);
        System.out.print("RouteHeading: "+ routeHeading);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

これは、xml を解析してホストに接続するためのコードです。

__ _ __ _ _ __ _ _ __ _ :編集: _ __ __ _ __ _ _ __ _ __ _ __ _ _ _

    public InputStream HTTPrequest(String stopNo){
    String parameterURL = "appID="+this.appId+"&apiKey="+this.AppKey+"&routeNo=1&stopNo="+stopNo+"";    
    URL url;
    HttpURLConnection connection = null;
    try {
        url = new URL(this.requestGetRouteSummaryForStop);
        connection = (HttpURLConnection) url.openConnection();
        connection.setDoOutput(true);
        connection.setDoInput(true);
        connection.setInstanceFollowRedirects(false); 
        connection.setRequestMethod("POST"); 
        connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
        connection.setRequestProperty("charset", "utf-8");
        connection.setRequestProperty("Content-Length", "" + Integer.toString(parameterURL.getBytes().length));
        connection.setUseCaches (false);

        //send request
         DataOutputStream wr = new DataOutputStream (
                  connection.getOutputStream ());
                  wr.writeBytes (parameterURL);
                  wr.flush ();
                  wr.close ();

        //Get Response  

          InputStream is = connection.getInputStream();
         return is;
    } catch (Exception e) {
        System.out.print("ERROR: ");
        e.printStackTrace();
        return null;
    }finally{
        if(connection != null){
            connection.disconnect();
        }
    }
}


public void parseXmlData(InputStream response){
    InputStream is = response;

    try {

        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        dbf.setNamespaceAware(false);
        Document doc = dbf.newDocumentBuilder().parse(is);

        XPathFactory xf = XPathFactory.newInstance();
        XPath xPath = xf.newXPath();

        // Find direction ANY where within the document...

        XPathExpression xExp = xPath.compile("//DirectionID");
        NodeList nl = (NodeList) xExp.evaluate(doc, XPathConstants.NODESET);
        for (int index = 0; index < nl.getLength(); index++) {
            Node node = nl.item(index);
            System.out.println(node.getTextContent());
        }

        // Find the direction node's any where in the document
        // where it's a child of Route, which has a child
        // node called RouteNo with the text value of 'int'...
        xExp = xPath.compile("//Route[RouteNo = 'int']/Direction");
        nl = (NodeList) xExp.evaluate(doc, XPathConstants.NODESET);
        for (int index = 0; index < nl.getLength(); index++) {
            Node node = nl.item(index);
            System.out.println(node.getTextContent());
        }

    } catch (Exception exp) {
        exp.printStackTrace();
    }
}

それは私にエラーを与える

[Fatal Error] :1:1: Premature end of file.
org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Premature end of file.
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
    at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
    at OcTranspoConnect.parseXmlData(OcTranspoConnect.java:82)
    at OcTranspoConnect.main(OcTranspoConnect.java:29)
4

1 に答える 1