2012-03-25 28 views
4

我正在解析來自此的數據XML url文本輸入因用戶而異。每當文本變量中有空格時,我會得到以下例外:Android中的Saxparser異常

org.apache.harmony.xml.ExpatParser$ParseException: At line 11, column 2: mismatched tag 
org.apache.harmony.xml.ExpatParser.parseFragment(ExpatParser.java:520) 
org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:479) 
org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:318) 
org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:275) 
gps.app.tkartor.XMLObjects.XMLParser.findStreet(XMLParser.java:99) 

如果沒有空格,它可以正常工作。解析代碼:

public void findStreet(String searchWord) { 
    try { 
     url = new URL(
       "http://maps.travelsouthyorkshire.com/iGNMSearchService.asmx/TextSearch?text=" 
         + searchWord + "&maxResults=100"); 
     System.out.println(url.toString()); 
     parserFactory = SAXParserFactory.newInstance(); 
     parser = parserFactory.newSAXParser(); 
     reader = parser.getXMLReader(); 
     streetHandler = new StreetHandler(); 
     reader.setContentHandler(streetHandler); 
     reader.parse(new InputSource(url.openStream()));//line 99 
     poi = streetHandler.getAllStreets(); 

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

回答

1

的東西時,我認爲這兩個使用網頁瀏覽器這些網址,我得到有效的XML。當然,第11行沒有錯誤,如棧跟蹤所示。

我的結論是,當你以編程的方式進行瀏覽而不是在網絡瀏覽器中進行瀏覽時,獲取URL(特別是帶有空格的URL)會產生不同的結果。我期望這是因爲瀏覽器在發送之前「有用」地修復了URL以對空格字符進行編碼。 (並且我懷疑你將這個固定的URL粘貼到問題中......)

要確認此診斷,需要捕獲並查看Android應用程序從服務器獲取的實際文件內容。我的猜測是它實際上是一個HTML錯誤頁面。這通常不是有效的XML,因此也是XML解析錯誤。

如果事實證明這是問題,那麼您需要在將搜索字符串嵌入URL之前正確編碼搜索字符串。如果您使用的是純Java,那麼我建議使用URLEncoder.encode,或者使用URI類從其組件中組裝URL。有可能在Android平臺上有更好的方式...