簡體   English   中英

在java Malformedurlexception中解析XML

[英]Parsing XML in java Malformedurlexception

我試圖解析一個xml文件,但發生了Malformedurlexception 你知道為什么會這樣嗎?

注意:在第一個代碼段中有一行作為注釋system.out.println(requestXml)它正在工作(xml內容正在以字符串形式出現)但我想解析它但是解析方法不起作用。

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:W / 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.example.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):在android.view.View.performClick(View.java:4204)04-30 11:55:21.319:W / System.err (826):在android.view.View $ PerformClick.run(View.java:17355)04-30 11:55:21.319:W / System.err(826):在android.os.Handler.handleCallback(Handler。 java:725)04-30 11:55:21.319:W / System.err(826):在android.os.Handler.dispatchMessage(Handler.java:9 2)04-30 11:55:21.319:W / System.err(826):在android.os.Looper.loop(Looper.java:137)04-30 11:55:21.319:W / System.err( 826):在android.app.ActivityThread.main(ActivityThread.java:5041)04-30 11:55:21.319:W / System.err(826):at java.lang.reflect.Method.invokeNative(Native Method) 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):at dalvik.system.NativeStart.main(Native Method)

您使用什么來解析XML是這種方法

public Document parse(String uri) throws SAXException, IOException

它基本上期望從中獲取內容的uri。 這不是您的情況,因為您已經查詢了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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM