我目前正在开发
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()); }