2010-02-15 67 views
7

我正在編寫一個消耗一些XHTML的小屏幕抓取應用程序 - 不用說XHTML無效:&符號不會作爲&轉義。使用Android的XmlPullParsers解析無效&符號

我使用Android的XmlPullParser,它噴出了在不正確編碼值以下錯誤:

org.xmlpull.v1.XmlPullParserException: unterminated entity ref 
(position:START_TAG <a href='/Fahrinfo/bin/query.bin/dox?ld=0.1&n=3&i=9c.0323581.1266265347&rt=0&vcra'> 
@55:134 in [email protected]) 

如何解決此得到什麼?我曾經想過以下解決方案:

  1. 結束語在另一個與實體裁判
  2. 配置分析器替換&符號的InputStream所以它奇蹟般地接受了不正確的標記

哪一些是可能的要更成功?

+1

感謝您發佈此問題。我正在嘗試使用XmlPullParser解析某個XML的「未終止的實體參考」,但我不確定是什麼導致了它。但是現在您提到了未被轉義的&符號(導致無效的XML,firefox將不會在源代碼模式下顯示)作爲可能的原因,我敢肯定這就是我的問題所在,這將使修復更容易! – 2010-03-17 20:59:53

回答

2

我會與您的第一個選項,取代&符號似乎更適合比其他解決方案。第二個選項似乎更多的是黑客通過接受不正確的標記來使其工作。

6

我被困在這裏大約一個小時,然後發現在我的情況下,這是「&」,無法通過XML PULL PARSER解決,所以我找到了解決方案。所以這裏是一段完全解決它的代碼片段。

void ParsingActivity(String r) { 
    try { 
     parserCreator = XmlPullParserFactory.newInstance(); 
     parser = parserCreator.newPullParser(); 
     // Here we give our file object in the form of a stream to the 
     // parser. 
     parser.setInput(new StringReader(r.replaceAll("&", "&amp;"))); 
     // as a SAX parser this will raise events/callback as and when it 
     // comes to a element. 
     int parserEvent = parser.getEventType(); 
     // we go thru a loop of all elements in the xml till we have 
     // reached END of document. 
     while (parserEvent != XmlPullParser.END_DOCUMENT) { 
      switch (parserEvent) { 
      // if u have reached start of a tag 
      case XmlPullParser.START_TAG: 
       // get the name of the tag 
       String tag = parser.getName(); 

幾乎我在做什麼,我只是&amp;更換&,因爲我正在處理解析URL。 希望這有助於。