如何在Android中从XML获取数据

阿陶拉

我创建了用于从XML格式获取数据的类,但它多次返回数据,哪里出错了?实际上我只想要两个标签,enur不是其他标签我在服务器上的数据

<?xml version="1.0" encoding="UTF-8"?>
<words>
   <word wid="373012">
      <en>DOCTOR (Noun)</en>
      <ur>حکیم </ur>
   </word>
   <word wid="356630">
      <en>DOCTOR (Verb)</en>
      <ur>بدلنا </ur>
   </word>
   <word wid="356633">
      <en>DOCTOR (Verb)</en>
      <ur>بدلنا  دھوکا  دینا  ۔</ur>
   </word>
   <word wid="329801">
      <en>DOCTOR</en>
      <ur>ڈاکٹر  معالج  ۔</ur>
   </word>
   <word wid="364114">
      <en>DOCTOR</en>
      <ur>اُستاد </ur>
   </word>
   <word wid="190805">
      <en>DOCTOR (Verb)</en>
      <ur>ڈاکٹر بنانا  ۔</ur>
   </word>
</words>

用于还原列表和XML解析的Java代码

try {
        ArrayList<UEDWord> list = null;
        URL URL = new URL(stringURL);
        XMLReader mXMLReader = SAXParserFactory.newInstance().newSAXParser().getXMLReader();
        mXMLReader.setContentHandler(new MXMLHandler());
        mXMLReader.parse(new InputSource(URL.openStream()));
        list = MXMLHandler.getSearchResults();
        return list;
        } catch (Exception e) {
        return null;
    }

//

public class MXMLHandler extends DefaultHandler {
    public static ArrayList<UEDWord> SearchResults = new ArrayList<UEDWord>();
    String LastEngWord = "";
    String LastUrduWord = "";
    Boolean currentElement = false;
    String currentValue = null;

    public MXMLHandler() {
        SearchResults.clear();
    }

    public static ArrayList<UEDWord> getSearchResults() {
        return SearchResults;
    }

    public void characters(char[] characters, int position, int noOfChar) throws SAXException {
        if (currentElement) {
            currentValue = new String(characters, position, noOfChar);
            currentElement = false;
        }
    }

    public void startElement(String URI, String localname, String qualifiedname, Attributes attributes)
            throws SAXException {
        currentElement = true;
    }

    public void endElement(String URI, String localname, String qualifiedname) throws SAXException {
        currentElement = false;

        if (localname.equalsIgnoreCase("en"))
            LastEngWord = currentValue;
        // do {
        if (localname.equalsIgnoreCase("ur"))
            LastUrduWord = currentValue;
        // return;
        // } while (!localname.equalsIgnoreCase("word"));
        // Log.e(URI, localname + " " + qualifiedname);
        SearchResults.add(new UEDWord(LastEngWord, LastUrduWord));
    }
}

SetterGetter类别

public class UEDWord {
    private String EngWord;
    private String UrduWord;

    UEDWord(String EngWord, String UrduWord) {
        this.EngWord = EngWord;
        this.UrduWord = UrduWord;
    }

    public String getEngWord() {
        return this.EngWord;
    }

    public String getUrduWord() {
        return this.UrduWord;
    }

    public void setEngWord(String EngWord) {
        this.EngWord = EngWord;
    }

    public void setUrduWord(String UrduWord) {
        this.UrduWord = UrduWord;
    }
}
路易吉动力

我认为这是正在发生的事情:

您的解析器到达'en'元素。进入“ startElement”方法,将“ currentElement”设置为true,然后进入“ characters”方法,在该方法中加载字符串,最后进入“ endElement”方法,在该方法中,该字符串用于创建UEDWord。

此时,已经存在一个错误:您正在尝试使用EN和UR作为它的参数来创建UEDWord,但是这里只有两个。在创建和添加Word之前,请检查两者是否均已设置。

向前,您的解析器将查看'ur'元素。读取内容。创建一个新Word并将其添加到列表中(此时,您创建并添加了2个Word而不是1个Word)。

现在解析器继续查看'/ word',从之前关闭'word'元素。因此调用了endElement方法,但从未重置currentValue,因此创建了一个与以前相同的新UEDWord并将其添加到数组中。

最后,如果我正确地解决了您的问题,那么您应该有13个多余的单词。

我的建议是检查在endElement中找到的哪个元素,并且仅在准备添加EN和UR单词的情况下才添加到列表中。将值添加到列表后,清除currentValue和LastEngWord,LastUrduWord,以便下次可以检查它们是否为空。

这应该起作用(如评论中所述,未经测试):

public class MXMLHandler extends DefaultHandler {
    public static ArrayList<UEDWord> SearchResults = new ArrayList<UEDWord>();
    String LastEngWord = null;
    String LastUrduWord = null;
    boolean currentElement = false;
    String currentValue = null;

    public MXMLHandler() {
        SearchResults.clear();
    }

    public static ArrayList<UEDWord> getSearchResults() {
        return SearchResults;
    }

    public void characters(char[] characters, int position, int noOfChar) throws SAXException {
        if (currentElement) {
            currentValue = new String(characters, position, noOfChar);
            currentElement = false;
        }
    }

    public void startElement(String URI, String localname, String qualifiedname, Attributes attributes)
            throws SAXException {
        currentElement = true;
    }

    public void endElement(String URI, String localname, String qualifiedname) throws SAXException {
        currentElement = false;


        if (localname.equalsIgnoreCase("en"))
            LastEngWord = currentValue;
        else if (localname.equalsIgnoreCase("ur"))
            LastUrduWord = currentValue;

        if(LastEngWord != null && LastUrdWord != null)
        {
           SearchResults.add(new UEDWord(LastEngWord, LastUrduWord));
           LastEngWord = null;
           LastUrdWord = null;
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Android中从Intent中获取数据

来自分类Dev

如何从xml中获取数据?

来自分类Dev

如何在Android中传递值并获取json数据?

来自分类Dev

如何在Android的地图活动中从URL获取JSON数据

来自分类Dev

如何在Android中的HttpPost中发送Xml数据

来自分类Dev

如何在Android中的HttpPost中发送Xml数据

来自分类Dev

如何在C#中对xml数据进行排序以根据元素的值获取特定数据

来自分类Dev

在Android中,如何在ListView上使用XML Pull Parser来显示XML文件中的数据?

来自分类Dev

如何在 PHP 中从 XML 中获取和读取特定数据?

来自分类Dev

我如何从字典中获取XML数据

来自分类Dev

如何从xml中获取数据(无数组)

来自分类Dev

如何在xml中获取SubMenu?

来自分类Dev

如何在Perl中获取xml值?

来自分类Dev

如何在Android中从sqlite数据库插入和获取数据?

来自分类Dev

而不是JSON数据链接返回.txt文件如何在android中获取JSON数据

来自分类Dev

如何从xml文件中的数据获取到Android中的多个字符串数组?

来自分类Dev

如何从xml文件中的数据获取到Android中的多个字符串数组?

来自分类Dev

如何在oracle过程中获取XML数据的布尔值

来自分类Dev

如何在Firebase中获取同步数据?

来自分类Dev

如何在mongoengine中获取ReferenceField数据?

来自分类Dev

如何在Yesod中获取发布数据?

来自分类Dev

如何在XSL文件中获取数据

来自分类Dev

如何在React中获取数据属性?

来自分类Dev

如何在使用中处理获取的数据

来自分类Dev

如何在python中获取csv数据

来自分类Dev

如何在WebAPI中获取POST数据?

来自分类Dev

如何在mongodb中批量获取数据

来自分类Dev

如何在magento中获取运输数据

来自分类Dev

如何在Swift中从NSMutableURLRequest获取数据?

Related 相关文章

  1. 1

    如何在Android中从Intent中获取数据

  2. 2

    如何从xml中获取数据?

  3. 3

    如何在Android中传递值并获取json数据?

  4. 4

    如何在Android的地图活动中从URL获取JSON数据

  5. 5

    如何在Android中的HttpPost中发送Xml数据

  6. 6

    如何在Android中的HttpPost中发送Xml数据

  7. 7

    如何在C#中对xml数据进行排序以根据元素的值获取特定数据

  8. 8

    在Android中,如何在ListView上使用XML Pull Parser来显示XML文件中的数据?

  9. 9

    如何在 PHP 中从 XML 中获取和读取特定数据?

  10. 10

    我如何从字典中获取XML数据

  11. 11

    如何从xml中获取数据(无数组)

  12. 12

    如何在xml中获取SubMenu?

  13. 13

    如何在Perl中获取xml值?

  14. 14

    如何在Android中从sqlite数据库插入和获取数据?

  15. 15

    而不是JSON数据链接返回.txt文件如何在android中获取JSON数据

  16. 16

    如何从xml文件中的数据获取到Android中的多个字符串数组?

  17. 17

    如何从xml文件中的数据获取到Android中的多个字符串数组?

  18. 18

    如何在oracle过程中获取XML数据的布尔值

  19. 19

    如何在Firebase中获取同步数据?

  20. 20

    如何在mongoengine中获取ReferenceField数据?

  21. 21

    如何在Yesod中获取发布数据?

  22. 22

    如何在XSL文件中获取数据

  23. 23

    如何在React中获取数据属性?

  24. 24

    如何在使用中处理获取的数据

  25. 25

    如何在python中获取csv数据

  26. 26

    如何在WebAPI中获取POST数据?

  27. 27

    如何在mongodb中批量获取数据

  28. 28

    如何在magento中获取运输数据

  29. 29

    如何在Swift中从NSMutableURLRequest获取数据?

热门标签

归档