2015-05-19 2 views
0

Я пытаюсь передать имя файла xml функции (getAllXmlData) и извлечь ее данные и сохранить их в многомерном массиве и вернуть данные xml через xmlArray в первый класс. У меня есть следующий код:Возвращаемый массив в класс

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 

Я appriciate любой помощи. Кроме того, если есть более эффективный и динамичный способ хранения XML-данных в массиве без необходимости выполнять элемент element by elemnt. Thx

+2

объявление находится внутри блока попытаться поймать. что-либо вне этой области не может получить к нему доступ. – njzk2

ответ

0

Move XmlArray из TRY/улова:

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; 
     } 
} 
+0

ОК. Спасибо. Но чем я могу получить точный размер массива? –

+0

Вы просто объявляете массив вне области действия try/block, чтобы после этого вы могли получить к нему доступ. Вы все еще создаете его там, где у вас его есть. – Ryan

Смежные вопросы