我想解析一個xml文件,但Malformedurlexception
發生。你知道它爲什麼會發生嗎?解析Java中的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();
}
日誌是:
11月4日至30日:55:21.299:W/System.err的(826):java.net.MalformedURLException: 協議未找到:04-30 11:55:21.299:W/System.err(826): 04-30 11: W/System.err(826):04-30 11:55:21.299: 11:55:21.299:W/System.err(826):04-30 11:55:21.299: 。 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(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):在 dalvik.system.NativeStart.main(本機方法)
但你使用過dbuilder嗎?我的意思是我的代碼中有哪部分是錯誤的。我不明白你的建議是什麼?你能在代碼中提供更多細節嗎? – abidinberkay 2013-04-30 12:44:54
@abidinberkay我編輯了我的答案,希望這會更容易理解。 – 2013-04-30 12:48:27
感謝您的幫助,但我怎樣才能讓他們一個接一個地寫他們到控制檯(我知道我是一個初學者)我的意思是在文檔後做什麼。 – abidinberkay 2013-04-30 13:08:50