1

XML文字列をリスト配列に変換する関数があります。最後の条件に到達している間、関数の最後のリターンにジャンプします。

コードは、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;

    }

これは私のxmlです

4

4 に答える 4

0

最初の項目が必要ない場合は、if (nList.getLength() > 0)ステートメントを次のように変更しますif (nList.getLength() > 1)

また、elseステートメントをif (nNode.getNodeType() == Node.ELEMENT_NODE)入れて、ログ出力を入れます。例えば:

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

于 2013-05-09T06:29:16.973 に答える
0

コードから、for ループの後にステートメントを実行しない唯一のケースは、何らかの EXCETPION を取得している場合であると推測できます。コメントによると、ログに例外は見られないと言っています。次に、ロガーが正しいことを確認するためにいくつかの Sysout ステートメントを入れてテストするために、あなたのロガーを疑います。log.e() メソッドが正しく機能していない可能性があります。log.i() を例外ブロックに入れてみてください。

于 2013-05-09T06:17:02.400 に答える
0

i=0演算子を使用

// get all order details
                for (int i = 0; i < nList.getLength(); i++) {
}

}
于 2013-05-09T06:00:17.990 に答える
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("&", "&amp;");
    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;
}
于 2013-05-09T09:27:27.813 に答える