Ошибка чтения Java XML - PullRequest
0 голосов
/ 09 июля 2011

Я получаю сообщение об ошибке при запуске начала моей программы чтения XML:

public static void main(String[] args) 
{
    System.out.println("XML Reader");

    try
    {
        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
        Document doc = docBuilder.parse("database.xml");

        //normalize text
        doc.getDocumentElement().normalize();
        System.out.println("The root of this doc is "+doc.getDocumentElement().getNodeName());

        NodeList listOfAddresses = doc.getElementsByTagName("address");
        int totalAddresses = listOfAddresses.getLength();
        System.out.println(totalAddresses+" addresses in "+ doc.getDocumentElement().getNodeName());

        //main loop
        for(int i = 0; i<listOfAddresses.getLength(); i++)
        {
            Node items = listOfAddresses.item(i);

            if(items.getNodeType() == Node.ELEMENT_NODE)
            {
                System.out.println("Address #"+i);

                Element element = (Element)items;

                NodeList nameList = element.getElementsByTagName("name");
                Element nameElement = (Element)nameList.item(0);
                NodeList nameOutput = nameElement.getChildNodes();


                System.out.println("name: "+nameElement);
            }
        }


    }

    catch(SAXParseException err)
    {
        System.out.println("Sax Parse Exception error on line "+err.getLineNumber());
    }

    catch(SAXException e)
    {
        System.out.println("SAX Exception error");
        Exception x = e.getException();
        ((x == null) ? e : x).printStackTrace();
    }

    catch(Throwable t)
    {
        System.out.println("Trowable error");
        t.printStackTrace();
    }
}

NetBeans дает мне следующий вывод:

run:
XML Reader
The root of this doc is database
2 addresses in database
java.lang.NullPointerException
Address #0
Trowable error
    at xmlreader.XMLreader.main(XMLreader.java:42)

Может ли кто-нибудь помочь мне разобраться с этим?

Ответы [ 2 ]

2 голосов
/ 09 июля 2011

Вы не проверяете, существует ли элемент 0. По существу, .item () вернет ноль, если индекс недействителен, поэтому может не быть элемента с индексом 0, который возвращает ноль, и затем вы пытаетесь вызвать getChildNodes () для нулевого указателя. Отсюда твой NPE.

Вы должны перебирать элементы в списке узлов.

изменение

Element nameElement = (Element)nameList.item(0);

до

for(int x = 0; x < nameList.getLength(); x++) {
  nameElement = nameList.item(x);
  NodeList nameOutput = nameElement.getChildNodes();
  System.out.println("name: "+nameElement);
}
0 голосов
/ 17 июля 2019
*import java.io.File;
import java.util.Scanner;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
public class XmlReader {
   public static void main(String[] args) {
       Scanner s=new Scanner(System.in);
       String n=s.nextLine();
      try {
         File inputFile = new File(name of the file);
         DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
         DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
         Document doc = dBuilder.parse(inputFile);
         doc.getDocumentElement().normalize();
         System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
         NodeList nList = doc.getElementsByTagName("student");
         System.out.println("----------------------------");

         for (int temp = 0; temp < nList.getLength(); temp++) {
            Node nNode = nList.item(temp);
            System.out.println();

            if (nNode.getNodeType() == Node.ELEMENT_NODE) {
               Element eElement = (Element) nNode;
               if(eElement.getAttribute("rollno").equals(n)){
               System.out.println("Student roll no : " + eElement.getAttribute("rollno"));
               System.out.println("First Name : " + eElement.getElementsByTagName("firstname").item(0).getTextContent());
               System.out.println("Last Name : " + eElement.getElementsByTagName("lastname").item(0).getTextContent());
               System.out.println("Marks : " + eElement.getElementsByTagName("marks").item(0).getTextContent());
               }
            }
         }
         s.close();
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
}*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...