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

时间:2010-02-15 21:06:22

标签: android xml-parsing invalid-characters

我正在编写一个消耗一些XHTML的小屏幕抓取应用程序 - 不用说XHTML无效:&符号不会转义为&

我正在使用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 java.io.InputStreamReader@43b1ef70) 

我如何解决这个问题?我考虑过以下解决方案:

  1. InputStream包含在用实体引用取代&符号的另一个{{1}}
  2. 配置Parser,使其神奇地接受不正确的标记
  3. 哪些可能会更成功?

2 个答案:

答案 0 :(得分:6)

我被困在这上面大约一个小时才弄清楚在我的情况下它是“&amp;” 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。 希望这会有所帮助。

答案 1 :(得分:2)

我会选择你的第一个选项,取代&符号似乎比另一个更合适。第二个选项似乎更像是 hack ,通过接受错误的标记来使其工作。