【发布时间】:2011-02-04 05:53:12
【问题描述】:
我目前正在开发一个 Android 应用程序,这意味着要学习 Java。我已经用 Python 玩了几年了,但我决定是时候加强了,因为我有一部 Android 手机。该应用程序基本上显示存储在本地 XML 文件中的视频游戏列表。现在,XML 文件的结构基本上是游戏>游戏(多个)>名称(加上其他现在不重要的东西)。我目前正在尝试获取游戏名称列表。我查找了教程和信息,但似乎都不是我所需要的。我想真正了解它是如何工作的,而不仅仅是有一段我可以复制/粘贴的工作代码。另外,请记住,名称列表必须以字符串数组的形式结束,以便 Android 使用它。这是我现在拥有的功能(从教程复制/粘贴并经过大量编辑,因此不可读。一旦它实际工作,我将修复它。)现在列表视图显示为空。至少它比以前更好,而且它不再崩溃了......
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;
}
【问题讨论】:
-
如果您不熟悉 Java,我不建议您从尝试解析 XML 文件开始。 DOM 调用的一般格式看起来没问题。你在用
NodeList nodeList做什么?程序是否进入 FOR 循环? -
除非这是一个学习练习,否则您真的不想玩弄低级 DOM 接口来做可以通过单个 XPath 表达式轻松实现的事情。 (即使您想使用低级树形导航,DOM 也是最糟糕的选择 - JDOM 和 XOM 更容易使用且速度更快。)
-
其实Android没有XPath。所以我必须做低级的。
-
FYI 看起来较新版本的 Android(Android 2.2 / 8 级)确实支持 XPATH:developer.android.com/reference/javax/xml/xpath/…,对于旧版本,可以使用 dom4j 和 jaxen:brainflush.wordpress.com/2009/05/19/…
标签: java android xml xml-parsing