Seien Sie vorsichtig mit der Methode XmlPullParser.netText()

黄舟
Freigeben: 2017-02-17 15:24:44
Original
1342 Leute haben es durchsucht

Auf Android Die Verwendung von XmlPullParser ist eine hocheffiziente und einfach zu wartende Methode zum Parsen von XML. Android hatte in der Vergangenheit zwei Implementierungsklassen, die diese Schnittstelle implementieren:

  • KXmlParser über XmlPullParserFactory.newPullParser().

  • ExpatPullParser, über Xml.newPullParser().

Implementieren Sie Xml.newPullParser() den Aufruf von <span style="color:#007000">nextText()<code style="font-family:monospace; line-height:1em"><span style="color:#007000">nextText()</span><span style="background-color:rgb(255,255,255)">有个错误,<span style="color:rgb(0,112,0); font-family:monospace; line-height:12px">nextText()</span></span>Es liegt ein Fehler vor, nextText ( ) END_TAG执行

hat nicht immer Vorrang vor

, wie in der Dokumentation erwähnt.

Daher können bei einigen Apps Fehler bei zusätzlichen Aufrufen von next() oder nextTag(); auftreten.

        throws XmlPullParserException, IOException {
        XmlPullParser parser = Xml.newPullParser();
        parser.setInput(reader);

        parser.nextTag();
        parser.require(XmlPullParser.START_TAG, null, "menu");
        while (parser.nextTag() == XmlPullParser.START_TAG) {
            parser.require(XmlPullParser.START_TAG, null, "item");
            String itemText = parser.nextText();
            parser.nextTag(); // this call shouldn’t be necessary!
            parser.require(XmlPullParser.END_TAG, null, "item");
            System.out.println("menu option: " + itemText);
        }
        parser.require(XmlPullParser.END_TAG, null, "menu");
    }

    public static void main(String[] args) throws Exception {
        new Menu().parseXml(new StringReader("<?xml version=&#39;1.0&#39;?>"
                + "<menu>"
                + "  <item>Waffles</item>"
                + "  <item>Coffee</item>"
                + "</menu>"));
    }
Nach dem Login kopieren

In Android4.0 ändert sich XML .newPullParser() gibt die KxmlParser-Klasse zurück und die ExpatPullParser-Klasse wird gelöscht. Dies behebt den Fehler von

nextTag()

Leider handelt es sich bei den aktuellen Anwendungen, die abstürzen können, um Versionen niedriger als Android 4.0.


org.xmlpull.v1.XmlPullParserException: expected: END_TAG {null}item (position:START_TAG <item>@1:37 in java.io.StringReader@40442fa8) 
     at org.kxml2.io.KXmlParser.require(KXmlParser.java:2046)
     at com.publicobject.waffles.Menu.parseXml(Menu.java:25)
 at com.publicobject.waffles.Menu.main(Menu.java:32)
Nach dem Login kopieren

Die Lösung besteht darin, nextTag() erst nach dem Aufruf von nextText() zu verwenden , nur wenn der aktuelle Standort nicht END_TAG ist.

 while (parser.nextTag() == XmlPullParser.START_TAG) {
      parser.require(XmlPullParser.START_TAG, null, "item");
      String itemText = parser.nextText();
      if (parser.getEventType() != XmlPullParser.END_TAG) {
          parser.nextTag();
      }
      parser.require(XmlPullParser.END_TAG, null, "item");
      System.out.println("menu option: " + itemText);
  }
Nach dem Login kopieren

Der obige Code kann alle XML-Versionen korrekt analysieren. Wenn die Anwendung nextText() häufig verwendet, dann verwendet sie NextText(). verwendet die folgende Hilfsmethode.

 private String safeNextText(XmlPullParser parser)
          throws XmlPullParserException, IOException {
      String result = parser.nextText();
      if (parser.getEventType() != XmlPullParser.END_TAG) {
          parser.nextTag();
      }
      return result;
  }
Nach dem Login kopieren

Die Verwendung eines einzigen XmlPullParse vereinfacht unsere Wartung und ermöglicht es uns, mehr Energie für die Verbesserung der Systemleistung aufzuwenden.

Das Obige ist der Inhalt der XmlPullParser.netText()-Methode. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Verwandte Etiketten:
xml
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!