我在这个论坛中发现了很多关于XML解析的有用条目,然后编写了这段代码,用我的Android应用程序中的SD卡读取我的XML文件。 不幸的是,它只返回第一个值,并在它之后崩溃。
这是我的XML文件:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="testset">
<item>ABCDEFGHIJKLMNOPQRSTUVWXYZ</item>
<item>abcdefghijklmnopqrstuvwxyz</item>
</string-array>
<string-array name="testsetxy">
<item>ABCDEFGHIJKLMNOPQRSTUVWXYZ</item>
<item>abcdefghijklmnopqrstuvwxyz</item>
</string-array>
</resources>
这是我的代码的解析部分:
public static List<Testset> parse(InputStream is) {
List<Testset> tsList = null;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder = factory.newDocumentBuilder();
Document xmlDoc = builder.parse(is);
Element root = xmlDoc.getDocumentElement();
NodeList listNodes = root.getElementsByTagName(NODE);
Testset testset = new Testset();
for(int i = 0; i < listNodes.getLength(); ++i) {
Node curNode = listNodes.item(i);
String name = ((Attr)(curNode.getAttributes().item(0))).getValue();
testset.setName(name);
NodeList listChilds = curNode.getChildNodes();
List<String> testcases = null;
for(int j = 0; j < listChilds.getLength(); ++j) {
Node child = listChilds.item(j);
if(child.getNodeType() == Node.ELEMENT_NODE) {
String childName = child.getNodeName();
String childValue = ((Element)child).getTextContent();
if(childName.equalsIgnoreCase(ITEM)) {
Log.v(TAG, childValue);
testcases.add(childValue);
}
else {
Log.v(TAG, "wrong XML format");
}
}
}
testset.setTestcases(testcases);
}
tsList.add(testset);
is.close();
} catch (ParserConfigurationException e) {
tsList = null;
} catch (SAXException e) {
tsList = null;
} catch (IOException e) {
tsList = null;
}
return tsList;
}
Log.v(TAG,childValue);返回第一个值的值。
任何人都知道我做错了什么?
由于
答案 0 :(得分:0)
您在此代码中的问题:
List<Testset> tsList = null;
List<String> testcases = null;
您没有初始化这两个列表,因此在您在测试用例NullExceptionError
中添加第一个子项后,您将面临List
,因此代码Log
工作一次然后触发的异常尝试初始化你的两个List
喜欢那个
List<Testset> tsList = new ArrayList<Testset>();
List<String> testcases = new ArrayList<String>();
喂我回来