2013-04-30 3 views
0

Я пытаюсь проанализировать XML-файл, но происходит Malformedurlexception. Вы не знаете, почему это происходит?Анализ XML в java Malformedurlexception

примечание: в первом сегменте кода есть строка как комментарий system.out.println(requestXml) он работает (содержимое xml подходит как строка), но я хочу его проанализировать, но метод parse не работает.

код

String requestXml = ""; 

try { 
    String argUrl = "http://192.168.1.25:3480/data_request?id=sdata&output_format=xml"; 

    URL url = new URL(argUrl); 
    URLConnection con = url.openConnection(); 
    // specify that we will send output and accept input 
    con.setDoInput(true); 
    con.setDoOutput(true); 

    con.setConnectTimeout(20000); // long timeout, but not infinite 
    con.setReadTimeout(20000); 

    con.setUseCaches(false); 
    con.setDefaultUseCaches(false); 

    // tell the web server what we are sending 
    con.setRequestProperty("Content-Type", "text/xml"); 

    OutputStreamWriter writer = new OutputStreamWriter(con.getOutputStream()); 
    writer.write(requestXml); 
    writer.flush(); 
    writer.close(); 

    // reading the response 
    InputStreamReader reader = new InputStreamReader(con.getInputStream()); 

    StringBuilder buf = new StringBuilder(); 
    char[] cbuf = new char[2048]; 
    int num; 

    while (-1 != (num = reader.read(cbuf))) { 
     buf.append(cbuf, 0, num); 
    } 
    requestXml = buf.toString(); 
    xmlParser(requestXml); 

    //System.out.println(requestXml); 

} catch (Throwable t) { 
    t.printStackTrace(System.out); 
} 
return requestXml; 

и способ XMLParser является:

protected void xmlParser(String xmlToBeParsed) { 

    try { 

     DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
     Document doc = dBuilder.parse(xmlToBeParsed); 
     doc.getDocumentElement().normalize(); 
     NodeList nodes = doc.getElementsByTagName("devices"); 

     for (int i = 0; i < nodes.getLength(); i++) { 
      Node node = nodes.item(i); 

      if (node.getNodeType() == Node.ELEMENT_NODE) { 
       Element element = (Element) node; 
       System.out.println("Stock Symbol: " + getValue("device name", element)); 

      } 
     } 

    } 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(); 
    } 

} 

private static String getValue(String tag, Element element) { 
    NodeList nodes = element.getElementsByTagName(tag).item(0).getChildNodes(); 
    Node node = (Node) nodes.item(0); 
    return node.getNodeValue(); 
} 

бревно является:

04-30 11: 55: 21,299: Вт/System.err (826): java.net.MalformedURLException: Протокол не найден: 04-30 11: 55: 21.299: W/System.err (826): 04-30 11: 55: 21.299: W/System.err (826): 04-30 11: 55: 21.299: W/System.err (826): 04- 30 11: 55: 21.299: W/System.err (826): 04-30 11: 55: 21.299: W/System.err (826): 04-30 11: 55: 21.299: W/System. err (826): 04-30 11: 55: 21.299: W/System.err (826): 04-30 11: 55: 21.299: W/System.err (826): 04-30 11:55 : 21.309: W/System.err (826): 04-30 11: 55: 21.309: W/System.err (826): 04-30 11: 55: 21.309: W/System.err (826): 04 -30 11: 55: 21.309: W/System.err (826): 04-30 11: 55: 21.309: W/System.err (826): 04-30 11: 55: 21.309: W/System. err (826): 04-30 11: 55: 21.309: W/System.err (826): 04-30 11: 55: 21.309: W/System.err (826): 04- 30 11: 55: 21.309: W/System.err (826): 04-30 11: 55: 21.309: W/System.err (826): 04-30 11: 55: 21.309: W/System.err (826): 04-30 11: 55: 21.309: W/System.err (826): 04-30 11: 55: 21.309: W/System.err (826): 04-30 11: 55: 21.309 : W/System.err (826): at java.net.URL. (URL.java:178) 04-30 11: 55: 21.309: W/System.err (826): at java.net.URL . (URL.java:127) 04-30 11: 55: 21.309: W/System.err (826): at org.apache.harmony.xml.parsers.DocumentBuilderImpl.parse (DocumentBuilderImpl.java:115) 04-30 11: 55: 21.319: W/System.err (826): at javax.xml.parsers.DocumentBuilder.parse (DocumentBuilder.java:155) 04-30 11: 55: 21.319: W/System. err (826): at com.e xample.eos.SensorDataConnector.xmlParser (SensorDataConnector.java:93) 04-30 11: 55: 21.319: W/System.err (826): at com.example.eos.SensorDataConnector.getXMLData (SensorDataConnector.java:71) 04-30 11: 55: 21.319: W/System.err (826): at com.example.eos.EnergyOptimizer $ 5.onClick (EnergyOptimizer.java:148) 04-30 11: 55: 21.319: W /System.err(826): at android.view.View.performClick (View.java:4204) 04-30 11: 55: 21.319: W/System.err (826): at android.view.View $ PerformClick.run (View.java:17355) 04-30 11: 55: 21.319: W/System.err (826): at android.os.Handler.handleCallback (Handler.java:725) 04-30 11: 55: 21,319: W/System.err (826): при android.os.Handler.dispatchMessage (Handler.java:92) 04-30 11: 55: 21.319: W/System.err (826): at android.os.Looper.loop (Looper.java:137) 04 -30 11: 55: 21.319: W/System.err (826): at android.app.ActivityThread.main (ActivityThread.java:5041) 04-30 11: 55: 21.319: W/System.err (826): at java.lang.reflect.Method.invokeNative (родной метод) 04-30 11: 55: 21.319: W/System.err (826): at java.lang.reflect.Method.invoke (Method.java:511) 04-30 11: 55: 21.319: W/System.err (826): at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:793) 04 -30 11: 55: 21.319: W/System.err (826): at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:560) 04-30 11: 55: 21.329: W/System .err (826): в dalvik.system.NativeStart.main (Native Method)

ответ

2

Что вы используете для разбора XML является this method:

public Document parse(String uri) throws SAXException, IOException 

В основном ожидаются ури, из которых можно получить контент. Это не ваше дело, потому что вы уже запросили URL-адрес и проанализировали содержимое. Вы не предоставляете то, что ожидает этот метод.

Я думаю, вы должны быть все в порядке, если вы пропустите все чтение входного соединения потока и просто сделать:

InputStream input = con.getInputStream(); 
xmlParser(input); 

Примечание Я удалил много строк. И затем:

protected void xmlParser(InputStream input) 
{ 

    try { 

     DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
     Document doc = dBuilder.parse(input); 
+0

но вы использовали dbuilder? Я имею в виду, какая часть ошибочна в моем коде. Я не понял, каково ваше предложение? можете ли вы дать более подробную информацию в коде? – abidinberkay

+0

@abidinberkay Я отредактировал свой ответ так, надеюсь, будет легче понять. –

+0

спасибо за помощь, но как я могу получить их один за другим и записать их на консоль (я знаю, что я новичок), я имею в виду, что делать после doc. – abidinberkay

Смежные вопросы