本文主要是介绍readLine() 引起 XML 无法解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
报错:
org.xml.sax.SAXParseException: name expected (position:START_TAG rootxmlns:dlna@1:54 in java.io.InputStreamReader@7c28415)
String surl = "http://192.168.2.101:1068/description.xml";
URL url = new URL(surl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStream IS = conn.getInputStream();
InputStreamReader ISR = new InputStreamReader(IS);
BufferedReader BR = new BufferedReader(ISR);
String inputLine;
while ((inputLine = BR.readLine()) != null) {responseData += inputLine;
}
Log.e(Thread.currentThread().getStackTrace()[2] + "", "responseText:\n" + responseData);
DocumentBuilderFactory DBF = DocumentBuilderFactory.newInstance();
DocumentBuilder DB = DBF.newDocumentBuilder();
Document doc = DB.parse(new ByteArrayInputStream(responseData.getBytes()));
Notepad++ 查看原文,视图 - 显示符号 - 显示所有字符,可以看到 <root 后面不是一个空格,而是一个换行符!
我得到的响应一个换行都没有:
<?xml version="1.0" encoding="UTF-8"?><rootxmlns:dlna="urn:schemas-dlna-org:device-1-0"xmlns="urn:schemas-upnp-org:device-1-0"><specVersion> <major>1</major> <minor>0</minor></specVersion><device> <deviceType>urn:schemas-upnp-org:device:MediaRenderer:1</deviceType> <UDN>uuid:87619d57-abd7-4271-b372-e139fb094dde</UDN> <friendlyName>Macast(WIN-NMPIENTL4TM)</friendlyName> <manufacturer>xfangfang</manufacturer> <manufacturerURL>https://github.com/xfangfang</manufacturerURL> <modelDescription>AVTransport Media Renderer</modelDescription> <modelName>Macast</modelName> <modelNumber>0.64</modelNumber> <modelURL>https://xfangfang.github.io/Macast</modelURL> <dlna:X_DLNADOC xmlns:dlna="urn:schemas-dlna-org:device-1-0">DMR-1.50</dlna:X_DLNADOC> <serviceList> <service> <serviceType>urn:schemas-upnp-org:service:AVTransport:1</serviceType> <serviceId>urn:upnp-org:serviceId:AVTransport</serviceId> <controlURL>AVTransport/action</controlURL> <eventSubURL>AVTransport/event</eventSubURL> <SCPDURL>dlna/AVTransport.xml</SCPDURL> </service> <service> <serviceType>urn:schemas-upnp-org:service:RenderingControl:1</serviceType> <serviceId>urn:upnp-org:serviceId:RenderingControl</serviceId> <controlURL>RenderingControl/action</controlURL> <eventSubURL>RenderingControl/event</eventSubURL> <SCPDURL>dlna/RenderingControl.xml</SCPDURL> </service> <service> <serviceType>urn:schemas-upnp-org:service:ConnectionManager:1</serviceType> <serviceId>urn:upnp-org:serviceId:ConnectionManager</serviceId> <controlURL>ConnectionManager/action</controlURL> <eventSubURL>ConnectionManager/event</eventSubURL> <SCPDURL>dlna/ConnectionManager.xml</SCPDURL> </service> </serviceList></device></root>
联系软件作者拒绝修改,这怎么办呢?
正当我想用 responseData.replace("<rootxmlns:", "<root xmlns:") 的时候,突然想到或许 readLine() 是用换行符分割的,分割后换行符丢失了,我补上换行符不就可以了!
responseData += inputLine;
改成
responseData += inputLine + "\n";
卡了我几个小时的问题解决!
这篇关于readLine() 引起 XML 无法解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!