ホームページ  >  記事  >  バックエンド開発  >  Java&Xmlチュートリアル(2) DOMを使ってXMLファイルを解析する

Java&Xmlチュートリアル(2) DOMを使ってXMLファイルを解析する

黄舟
黄舟オリジナル
2017-02-22 14:30:351745ブラウズ


DOM XML 解析メソッドは、XML ファイルを Document オブジェクトとしてメモリに読み込み、さまざまな要素やノード オブジェクトを簡単にトラバースできます。要素とノードの移動は、順番に実行する必要はありません。
DOM 解析方法は、処理のために XML ファイル全体をメモリにロードするため、より小さな XML ファイルに適しています。より大きな XML ファイルの場合は、SAX 解析を使用する必要があります。
このチュートリアルでは、XML ファイルを読み取って解析し、それを使用してオブジェクトを作成します。以下は解析する XML ファイルです。
employee.xml

<?xml version="1.0"?><Employees>
    <Employee>
        <name>Pankaj</name>
        <age>29</age>
        <role>Java Developer</role>
        <gender>Male</gender>
    </Employee>
    <Employee>
        <name>Lisa</name>
        <age>35</age>
        <role>CSS Developer</role>
        <gender>Female</gender>
    </Employee></Employees>

この XML ファイルの内容は従業員情報のリストであるため、従業員を表す Employee クラスを作成し、XML ファイル情報をプログラムに読み取る必要があります。
以下は Employee クラスの定義です:

package com.journaldev.xml;public class Employee {
    private String name;    
    private String gender;    
    private int age;    
    private String role;    
    public String getName() {        
    return name;
    }    public void setName(String name) {        this.name = name;
    }    public String getGender() {        return gender;
    }    public void setGender(String gender) {        this.gender = gender;
    }    public int getAge() {        return age;
    }    public void setAge(int age) {        this.age = age;
    }    public String getRole() {        return role;
    }    public void setRole(String role) {        this.role = role;
    }    @Override
    public String toString() {        
    return "Employee:: Name=" + this.name + " Age=" + this.age + " Gender=" + this.gender +                
    " Role=" + this.role;
    }

}

ここでは、従業員オブジェクトに関する有用な情報を出力するために toString() メソッドをオーバーライドしていることに注意してください。次に、プログラム内で DOM 解析を使用して XML ファイルを読み取り、Employee オブジェクトのリストを取得します。
XMLReaderDOM.java

package com.journaldev.xml;
import java.io.File;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;import org.w3c.dom.Element;
import org.w3c.dom.Node;import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;public class XMLReaderDOM {

    public static void main(String[] args) {
        String filePath = "employee.xml";
        File xmlFile = new File(filePath);
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder;
        try {
            dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(xmlFile);
            doc.getDocumentElement().normalize();
            System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
            NodeList nodeList = doc.getElementsByTagName("Employee");
            //now XML is loaded as Document in memory, lets convert it to Object List
            List<Employee> empList = new ArrayList<Employee>();
            for (int i = 0; i < nodeList.getLength(); i++) {
                empList.add(getEmployee(nodeList.item(i)));
            }
            //lets print Employee list information
            for (Employee emp : empList) {
                System.out.println(emp.toString());
            }
        } catch (SAXException | ParserConfigurationException | IOException e1) {
            e1.printStackTrace();
        }

    }


    private static Employee getEmployee(Node node) {
        //XMLReaderDOM domReader = new XMLReaderDOM();
        Employee emp = new Employee();
        if (node.getNodeType() == Node.ELEMENT_NODE) {
            Element element = (Element) node;
            emp.setName(getTagValue("name", element));
            emp.setAge(Integer.parseInt(getTagValue("age", element)));
            emp.setGender(getTagValue("gender", element));
            emp.setRole(getTagValue("role", element));
        }

        return emp;
    }


    private static String getTagValue(String tag, Element element) {
        NodeList nodeList = element.getElementsByTagName(tag).item(0).getChildNodes();
        Node node = (Node) nodeList.item(0);
        return node.getNodeValue();
    }

}

プログラムの出力は次のとおりです:

Root element :EmployeesEmployee:: Name=Pankaj Age=29 Gender=Male 
Role=Java DeveloperEmployee:: Name=Lisa Age=35 Gender=Female Role=CSS Developer

実際の状況では、XML ファイルを解析する前に、まず XML ファイルの正当性を検証し、XSD を使用して XML ファイルを検証する方法を学習する必要があります。

元のアドレス: http://www.php.cn/

DOM XML 解析方法は、XML ファイルを Document オブジェクトとしてメモリに読み込み、さまざまな要素やノード オブジェクトを簡単にトラバースできます。 。要素とノードの移動は、順番に実行する必要はありません。
DOM 解析方法は、処理のために XML ファイル全体をメモリにロードするため、より小さな XML ファイルに適しています。より大きな XML ファイルの場合は、SAX 解析を使用する必要があります。
このチュートリアルでは、XML ファイルを読み取って解析し、それを使用してオブジェクトを作成します。以下は解析する XML ファイルです。
employee.xml

<?xml version="1.0"?><Employees>
    <Employee>
        <name>Pankaj</name>
        <age>29</age>
        <role>Java Developer</role>
        <gender>Male</gender>
    </Employee>
    <Employee>
        <name>Lisa</name>
        <age>35</age>
        <role>CSS Developer</role>
        <gender>Female</gender>
    </Employee></Employees>

この XML ファイルの内容は従業員情報のリストであるため、従業員を表す Employee クラスを作成し、XML ファイル情報をプログラムに読み取る必要があります。
以下は Employee クラスの定義です:

package com.journaldev.xml;public class Employee {
    private String name;    
    private String gender;    
    private int age;    
    private String role;    
    public String getName() {        
    return name;
    }    public void setName(String name) {        
    this.name = name;
    }    public String getGender() {        
    return gender;
    }    public void setGender(String gender) {        
    this.gender = gender;
    }    public int getAge() {        
    return age;
    }    public void setAge(int age) {        
    this.age = age;
    }    public String getRole() {        
    return role;
    }    public void setRole(String role) {        
    this.role = role;
    }    @Override
    public String toString() {        
    return "Employee:: Name=" + this.name + " Age=" + this.age + " Gender=" + this.gender +                
    " Role=" + this.role;
    }

}

ここでは、従業員オブジェクトに関する有用な情報を出力するために toString() メソッドをオーバーライドしていることに注意してください。次に、プログラム内で DOM 解析を使用して XML ファイルを読み取り、Employee オブジェクトのリストを取得します。
XMLReaderDOM.java

package com.journaldev.xml;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;import org.w3c.dom.Element;
import org.w3c.dom.Node;import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;public class XMLReaderDOM {

    public static void main(String[] args) {
        String filePath = "employee.xml";
        File xmlFile = new File(filePath);
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder;
        try {
            dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(xmlFile);
            doc.getDocumentElement().normalize();
            System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
            NodeList nodeList = doc.getElementsByTagName("Employee");
            //now XML is loaded as Document in memory, lets convert it to Object List
            List<Employee> empList = new ArrayList<Employee>();
            for (int i = 0; i < nodeList.getLength(); i++) {
                empList.add(getEmployee(nodeList.item(i)));
            }
            //lets print Employee list information
            for (Employee emp : empList) {
                System.out.println(emp.toString());
            }
        } catch (SAXException | ParserConfigurationException | IOException e1) {
            e1.printStackTrace();
        }

    }


    private static Employee getEmployee(Node node) {
        //XMLReaderDOM domReader = new XMLReaderDOM();
        Employee emp = new Employee();
        if (node.getNodeType() == Node.ELEMENT_NODE) {
            Element element = (Element) node;
            emp.setName(getTagValue("name", element));
            emp.setAge(Integer.parseInt(getTagValue("age", element)));
            emp.setGender(getTagValue("gender", element));
            emp.setRole(getTagValue("role", element));
        }

        return emp;
    }


    private static String getTagValue(String tag, Element element) {
        NodeList nodeList = element.getElementsByTagName(tag).item(0).getChildNodes();
        Node node = (Node) nodeList.item(0);
        return node.getNodeValue();
    }

}

プログラムの出力は次のとおりです:

Root element :EmployeesEmployee:: Name=Pankaj Age=29 Gender=Male Role=Java DeveloperEmployee:: Name=Lisa Age=35 Gender=Female Role=CSS Developer

実際の状況では、XML ファイルを解析する前に、まず XML ファイルの正当性を検証し、XSD を使用して XML ファイルを検証する方法を学習する必要があります。

上記は Java&Xml チュートリアル (2) DOM メソッドを使用して XML ファイルを解析する内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) をご覧ください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。