使用Android的XmlPullParsers解析无效&符号

问题描述:

我正在编写一个消耗一些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

我会与您的第一个选项,取代&符号似乎更适合比其他解决方案。第二个选项似乎更多的是黑客通过接受不正确的标记来使其工作。

我被困在这里大约一个小时,然后发现在我的情况下,这是“&”,无法通过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。 希望这有助于。