简体   繁体   中英

How to read from an xml file field java

I have the xml file cXml.xml:

  <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  <clients>
   <entity class="movieRental.domain.Client">
    <field name="name" type="java.lang.String" value="mary"/>
    <field name="age" type="int" value="23"/>
    <field name="id" type="java.lang.Object" value="1"/>
   </entity>

   <entity class="movieRental.domain.Client">
    <field name="name" type="java.lang.String" value="anne"/>
    <field name="age" type="int" value="34"/>
    <field name="id" type="java.lang.Object" value="2"/>
   </entity>

   <entity class="movieRental.domain.Client">
    <field name="name" type="java.lang.String" value="john"/>
    <field name="age" type="int" value="22"/>
    <field name="id" type="java.lang.Object" value="3"/>
   </entity>

   <entity class="movieRental.domain.Client">
    <field name="name" type="java.lang.String" value="miriam"/>
    <field name="age" type="int" value="28"/>
    <field name="id" type="java.lang.Object" value="7"/>
   </entity>

   </clients>

and I want to read from it and to print on the console.My code Java for this is:

 package movieRental.util;

 import java.io.File;
 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 ClientX {

    public static void main(String argv[]) {

        try {

            File fXmlFile = new File("C:\\Users\\Adina\\Desktop\\proj1-vers2\\data\\cXml.xml");
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(fXmlFile);

            doc.getDocumentElement().normalize();

            System.out.println("Root element :" + doc.getDocumentElement().getNodeName());

            NodeList nList = doc.getElementsByTagName("entity");

            System.out.println("----------------------------");

            for (int temp = 0; temp < nList.getLength(); temp++) {

                Node nNode = nList.item(temp);

                System.out.println("\nCurrent Element :" + nNode.getNodeName());

                if (nNode.getNodeType() == Node.ELEMENT_NODE) {

                    Element eElement = (Element) nNode;

                    System.out.println("Entity class : " + eElement.getAttribute("class"));
                    System.out.println("Name : " + eElement.getElementsByTagName("name").item(0).getTextContent());
                    System.out.println("Type : " + eElement.getElementsByTagName("type").item(0).getTextContent());
                    System.out.println("Value : " + eElement.getElementsByTagName("value").item(0).getTextContent());


                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

  }

When I run this class it gives me:

  Current Element :entity
  Entity class : movieRental.domain.Client
  java.lang.NullPointerException
  at movieRental.util.ClientX.main(ClientX.java:46)

How to print all the values from the xml file? Thank you.

Try this instead:

System.out.println("Entity class : " + eElement.getAttribute("class"));
NodeList children = eElement.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
    if (children.item(i).getNodeName().equalsIgnoreCase("field")) {
       System.out.println("Name : " + children.item(i).getAttributes().getNamedItem("name"));
       System.out.println("Type : " + children.item(i).getAttributes().getNamedItem("type"));
       System.out.println("Value : " + children.item(i).getAttributes().getNamedItem("value"));
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM