2016-02-04 5 views
0

Я ввел ниже код в файл, но он выбрасывает NullPointerException. Я пытаюсь проанализировать файл resource.xml с помощью DOM parser. Первый элемент печатается успешно, но он запускается на второй итерации.XML parsing throwing NullPointerException

package readXmlProject; 

import org.w3c.dom.*; 

import javax.xml.parsers.*; 

import java.io.*; 

public class readXml { 
    public static void main(String[] args){ 
     try{ 

      Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("resource.xml"); 
     doc.getDocumentElement().normalize(); 


     NodeList fieldsList = doc.getElementsByTagName("records").item(0).getChildNodes(); 
     System.out.println(fieldsList.getLength()); 
     for (int i = 0; i < fieldsList.getLength(); i++) { 
      NodeList itemDetails = fieldsList.item(i).getChildNodes(); 
      for(int j=0;j<fieldsList.getLength();j++){ 
       System.out.println(itemDetails.item(j).getTextContent()); 
      } 
     } 
    } 
    catch(Exception e){ 
     e.printStackTrace(); 
    }; 
} 
public static void getFieldsList(Document doc){ 
    NodeList fieldsList = doc.getElementsByTagName("fields").item(0).getChildNodes(); 

    for (int i = 0; i < fieldsList.getLength(); i++) { 
     System.out.println(fieldsList.item(i).getNodeName()); 
    } 
} 
} 

После выполнения приведенный выше код ниже является выход:

100 
1 
1438929000 
'00851' 
BNC SUVIDHA SPL 
1 
BBS 
BHUBANESWAR  
'00:00:00' 
'22:50:00' 
0 
BBS 
BHUBANESWAR  
BNC 
BANGALORE CANT 
java.lang.NullPointerException 
    at readXmlProject.readXml.main(readXml.java:22) 

В соответствии с вышеуказанной ошибкой, ниже линии вызывает ошибку

System.out.println(itemDetails.item(j).getTextContent()); 

ответ

1

for(int j=0;j<fieldsList.getLength();j++) должен быть for(int j=0;j< itemDetails.getLength();j++)

+0

Это сработало, но вы можете объяснить, почему он работал в первый раз, но не второй? –

+0

Число элементов такое же, как количество полей, то почему это не сработало, если я использовал поляList.getLength() –

+0

, это случайный случай, когда есть больше полей для этих элементов? это тривиальная ошибка, вы повторяли неправильную итерацию –

0

Я подозреваю, что вам нужно изменить внутренний цикл.

for(int j=0;j<fieldsList.item(i).getLength();j++){

0

Похоже, что вы хотите перебрать элементы в списке itemDetails во внутреннем цикле. Если это так, код для внутреннего контура должен быть

for(int j=0;j<itemDetails.getLength();j++){ 
Смежные вопросы