2016-03-21 17 views
-2

xmlファイルのフィールドのJavaから読み取る方法:私はxmlファイルの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> 

を、私はそれから読み取ると、このためconsole.MyコードのJavaに印刷したいです:

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(); 
     } 
    } 

    } 

私はこのクラスを実行すると、それは私を与える:

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

xmlファイルからすべての値を印刷する方法は?ありがとうございました。

+0

の可能性のある重複した[?NULLポインタ例外であり、私はそれをどのように修正すればよい何](http://stackoverflow.com/questions/218384/what-is- a-null-pointer-exception-and-how-do-i-fix-it) – TheMirrox

+0

コードを確認してください。解析している要素は 'field'タグの親要素です。 '名前'というタグはありません。 'フィールド'の属性です –

答えて

0

代わりにこれを試してみてください:

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")); 
    } 
} 
関連する問題