加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 02:23:41 所属栏目:Java 来源:网络整理
导读:我目前正在开发 Android应用程序,这意味着学习Java.我已经玩了几年Python,但现在我已经决定加强Android手机了.该应用程序基本上显示本地存储在XML文件中的视频游戏列表.现在,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());
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读