【问题标题】:Return array to a class将数组返回到类
【发布时间】:2015-07-31 16:55:44
【问题描述】:

我正在尝试将 xml 文件名传递给函数 (getAllXmlData) 并提取其数据并将它们存储在多维数组中,并通过 xmlArray 将 xml 数据返回给第一类。我有以下代码:

public class Utils {

    static String[][] getAllXmlData(String strIn1) {
        File file = new File(strIn1);
        try {
            DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
            Document doc = builder.parse(file);
            NodeList nodes = doc.getElementsByTagName("person");
            System.out.println("Total of elements : " + nodes.getLength());
            String xmlArray[][] = new String[nodes.getLength()][12];
            for (int i = 0; i < nodes.getLength(); i++) {
                Element element = (Element) nodes.item(i);

                NodeList recordID = element.getElementsByTagName("RecordID");
                Element line = (Element) recordID.item(0);
                xmlArray[i][1] = line.getFirstChild().getTextContent();
                xmlArray[i][2] = line.getAttribute("id");

                NodeList lastName = element.getElementsByTagName("LastName");
                line = (Element) lastName.item(0);
                xmlArray[i][3] = line.getFirstChild().getTextContent();

                NodeList firstName = element.getElementsByTagName("FirstName");
                line = (Element) firstName.item(0);
                xmlArray[i][4] = line.getFirstChild().getTextContent();

                NodeList title = element.getElementsByTagName("Title");
                line = (Element) title.item(0);
                xmlArray[i][5] = line.getFirstChild().getTextContent();

                NodeList hobby = element.getElementsByTagName("Hobby");
                line = (Element) hobby.item(0);
                xmlArray[i][6] = line.getFirstChild().getTextContent();

                NodeList phone1 = element.getElementsByTagName("CellPhone");
                line = (Element) phone1.item(0);
                xmlArray[i][7] = line.getFirstChild().getTextContent();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return xmlArray;
    }
}

但出现以下错误:

Utils.java:54: error: cannot find symbol
return xmlArray;
symbol: vailable xmlArray
location: class Utils

我感谢任何帮助。此外,如果有更有效和动态的方式将 xml 数据存储在数组中,而不必逐个元素地进行。 谢谢

【问题讨论】:

  • 声明在 try catch 块内。该范围之外的任何东西都无法访问它。

标签: java arrays xml multidimensional-array return


【解决方案1】:

将 xmlArray 移出 try/catch:

public class Utils {         
         static String[][] getAllXmlData(String strIn1) {    
                        File file = new File(strIn1);
                        String xmlArray[][] = null;
                        try {
                                DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
                                Document doc = builder.parse(file);
                                NodeList nodes = doc.getElementsByTagName("person");
                                System.out.println("Total of elements : " + nodes.getLength());
                                xmlArray = new String[nodes.getLength()][12];     
                                for (int i = 0; i < nodes.getLength(); i++) {
                                        Element element = (Element) nodes.item(i);

                                        NodeList recordID = element.getElementsByTagName("RecordID");
                                        Element line = (Element) recordID.item(0);
                                        xmlArray[i][1]=line.getFirstChild().getTextContent();
                                        xmlArray[i][2]=line.getAttribute("id");

                                        NodeList lastName = element.getElementsByTagName("LastName");
                                        line = (Element) lastName.item(0);
                                        xmlArray[i][3]=line.getFirstChild().getTextContent();

                                        NodeList firstName = element.getElementsByTagName("FirstName");
                                        line = (Element) firstName.item(0);
                                        xmlArray[i][4]=line.getFirstChild().getTextContent();

                                        NodeList title = element.getElementsByTagName("Title");
                                        line = (Element) title.item(0);
                                        xmlArray[i][5]=line.getFirstChild().getTextContent();

                                        NodeList hobby = element.getElementsByTagName("Hobby");
                                        line = (Element) hobby.item(0);
                                        xmlArray[i][6]=line.getFirstChild().getTextContent();

                                        NodeList phone1 = element.getElementsByTagName("CellPhone");
                                        line = (Element) phone1.item(0);
                                        xmlArray[i][7]=line.getFirstChild().getTextContent();
                             }
                        }
                        catch (Exception e) {
                                     e.printStackTrace();
                        }      
                        return xmlArray;
         }
}

【讨论】:

  • 好的。谢谢。但是我如何才能获得数组的确切大小?
  • 您只是在 try/block 范围之外声明数组,以便您可以在之后访问它。您仍在当前拥有它的地方实例化它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-05
  • 2012-04-13
  • 1970-01-01
  • 2016-11-19
  • 2012-04-02
  • 2013-07-12
  • 2011-03-21
相关资源
最近更新 更多