我有一个将xml字符串转换为list数组的函数。当达到最后一个条件时,它跳转到函数的最后一次返回。
代码在for循环之后不执行return语句,并且在for循环之后不执行任何行。它只是执行最后一个return语句。
功能如下所示
public List<List<String>> UpdateOrderDetailsTable(String xml) {
List<List<String>> ll = new ArrayList<List<String>>();
try {
DocumentBuilderFactory dbFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
InputStream is = new ByteArrayInputStream(xml.getBytes("UTF-8"));
Document doc = dBuilder.parse(is);
doc.getDocumentElement().normalize();
NodeList nList = doc.getElementsByTagName("ProductDetails");
Log.i("1111",Integer.toString(nList.getLength()));
if (nList.getLength() > 0) {
// get all order details
//i=1 for neglect first tag
for (int i = 1; i < nList.getLength(); i++) {
Node nNode = nList.item(i);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
List<String> l = new ArrayList<String>();
l.add(0, eElement.getElementsByTagName("OrderId").item(0).getTextContent());
l.add(1, eElement.getElementsByTagName("ProductId").item(0).getTextContent());
l.add(2, eElement.getElementsByTagName("ProductName").item(0).getTextContent());
l.add(3, eElement.getElementsByTagName("Model").item(0).getTextContent());
l.add(4, eElement.getElementsByTagName("Quantity").item(0).getTextContent());
ll.add(l);
Log.i(Integer.toString(i),eElement.getElementsByTagName("OrderId").item(0).getTextContent());
}
}
return ll;
}
Log.i("2222222222222222222","222222222222222222");
} catch (Exception e) {
Log.e("11111", e.toString());
}
return null;
}
答案 0 :(得分:0)
使用i=0
运算符
// get all order details
for (int i = 0; i < nList.getLength(); i++) {
}
}
答案 1 :(得分:0)
从你的代码中可以推断出,在for循环之后它不会执行任何语句的唯一情况是你得到了一些EXCETPION。根据您的意见,您说您在日志中没有看到任何异常。然后我怀疑你的记录器,为了测试尝试放置一些Sysout语句,以确保记录器是正确的。您的log.e()方法可能无法正常工作,只需尝试将log.i()放在异常块中并查看。
答案 2 :(得分:0)
如果您不想要第一个项目,请将if (nList.getLength() > 0)
语句更改为if (nList.getLength() > 1)
还为else
添加if (nNode.getNodeType() == Node.ELEMENT_NODE)
语句并输入日志输出。 E.g:
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
List<String> l = new ArrayList<String>();
l.add(0, eElement.getElementsByTagName("OrderId").item(0).getTextContent());
l.add(1, eElement.getElementsByTagName("ProductId").item(0).getTextContent());
l.add(2, eElement.getElementsByTagName("ProductName").item(0).getTextContent());
l.add(3, eElement.getElementsByTagName("Model").item(0).getTextContent());
l.add(4, eElement.getElementsByTagName("Quantity").item(0).getTextContent());
ll.add(l);
Log.i(Integer.toString(i), eElement.getElementsByTagName("OrderId").item(0).getTextContent());
} else {
Log.wtf("1111", "Item " + i + "is not Node.ELEMENT_NODE type");
}
您的节点可能都不是类型ELEMENT_NODE
答案 3 :(得分:0)
public static ArrayList<ProductDetails> parserData(String data) {
XmlPullParserFactory factory = null;
XmlPullParser parser = null;
ArrayList<ProductDetails> productDetailsList = new ArrayList<ProductDetails>();
ProductDetails productDetails = null;
data = data.replaceAll("&", "&");
data = data.replaceAll("<BR />", "");
try {
factory = XmlPullParserFactory.newInstance();
parser = factory.newPullParser();
parser.setInput(new StringReader(data));
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_TAG) {
if ("ProductDetails".equals(parser.getName())) {
productDetails = new ProductDetails();
} else if ("OrderId".equals(parser.getName())) {
productDetails.setOrderId(Integer.parseInt(parser.nextText()));
} else if ("ProductId".equals(parser.getName())) {
productDetails.setProductId(Integer.parseInt(parser.nextText()));
} else if ("ProductName".equals(parser.getName())) {
productDetails.setProductName(parser.nextText());
} else if ("Model".equals(parser.getName())) {
productDetails.setModel(parser.nextText());
} else if ("Quantity".equals(parser.getName())) {
productDetails.setQuantity(Integer.parseInt(parser.nextText()));
}
} else if (eventType == XmlPullParser.END_TAG) {
if ("ProductDetails".equals(parser.getName())) {
productDetailsList.add(productDetails);
}
}
eventType = parser.next();
}
System.out.println();
} catch (XmlPullParserException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
}
return productDetailsList;
}