微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Java解析XML文件以获取名称列表

我目前正在开发 Android应用程序,这意味着学习Java.我已经玩了几年Python,但现在我已经决定加强Android手机了.该应用程序基本上显示本地存储在XML文件中的视频游戏列表.现在,XML文件的结构基本上是游戏>游戏(多个)>名称(加上现在不重要的其他东西).我目前正在尝试获取游戏名称列表.我查阅了教程和信息,但似乎没有一个我需要的东西.我想要真正理解它是如何工作的,而不仅仅是我可以复制/粘贴一段可用的代码.另外,请记住,名称列表必须最终作为Android的字符串数组才能使用它.这是我现在拥有的功能(从教程中复制/粘贴并经过大量编辑,所以它不可读.一旦它实际工作,我将修复它.)现在listview显示为空.至少它比以前更好,它不会再崩溃了……

public static String[] parse(String filename) {
      ArrayList<String> gamesList = new ArrayList<String>();

      try {
      File file = new File(filename);
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
      DocumentBuilder db = dbf.newDocumentBuilder();
      Document doc = db.parse(file);
      doc.getDocumentElement().normalize();
      NodeList nodeList = doc.getElementsByTagName("game");

      for (int s = 0; s < nodeList.getLength(); s++) {

        Node fstNode = nodeList.item(s);

        //if (fstNode.getNodeType() == Node.ELEMENT_NODE) {

          Element name = (Element) fstNode;
               Element fstElmnt = (Element) fstNode;
          NodeList fstNmElmntLst = fstElmnt.getElementsByTagName("name");
          Element fstNmElmnt = (Element) fstNmElmntLst.item(0);
          NodeList fstNm = fstNmElmnt.getChildNodes();

          gamesList.add(fstNmElmnt.toString());
        //}

      }
      } catch (Exception e) {
        e.printstacktrace();
      }
    String[] gamesArray;
    gamesArray = (String[]) gamesList.toArray(new String[0]);
    return gamesArray;
     }

解决方法

在您的代码中,在向游戏列表添加fstNmElmnt.toString()时,它是与游戏标记对应的元素.假设您的XML是结构化的< name> Joe< / name>,那么您需要获取一个子节点的值(而不是为Element本身调用toString()):

gamesList.add(fstNmElmnt.getFirstChild().getNodeValue());

顺便说一句,除非你有< name>标签在文档的其他部分,或需要< game>在此阶段进行其他处理的元素,您可以使用以下(更简单的)代码

NodeList nodeList = doc.getElementsByTagName("name");
for (int s = 0; s < nodeList.getLength(); ++s) {
    gamesList.add(nodeList.item(s).getFirstChild().getNodeValue());
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐