Java&Xml教程(六)使用JDOM解析XML文件

互联网 17-2-22

在本教程中,我们一起学习使用JDOM將读取XML文件信息,并转换为Java对象。 JDOM并非标准JDK的一部分,因此使用JDOM需要从官方网站中下载JDOM的二进制包,下载后將JDOM的Jar包添加到工程的classpath中即可。 JDOM提供了包装类供我们选择底层的XML解析API,它提供了四个重要的类,我们可以使用它获取JDOM的Document对象。JDOM Document对象提供非常有用的方法来获取根元素,子元素列表,属性值等。 JDOM的重要的类: org.jdom2.input.DOMBuilder:使用DOM解析机制解析XML并将它转换为JDOM Document对象。 org.jdom2.input.SAXBuilder:使用SAX解析机制解析XML并转换为JDOM Document。 org.jdom2.input.StAXEventBuilderorg.jdom2.input.StAXStreamBuilder作用和前面两个类似,不再赘述。 org.jdom2.DocumentJDOM Document对象提供有用的方法获取根元素,读取或修改元素内容等操作,我们将要使用它获取XML的根元素。 org.jdom2.Document提供了有用的方法来获取子元素集合,获取子元素值,获取属性值等操作。 接下来我们开始使用案例程序读取XML文件并生成Java对象。 employees.xml

<?xml version="1.0" encoding="UTF-8"?><Employees>      <Employee id="1">          <age>29</age>          <name>Pankaj</name>          <gender>Male</gender>          <role>Java Developer</role>      </Employee>      <Employee id="2">          <age>35</age>          <name>Lisa</name>          <gender>Female</gender>          <role>CEO</role>      </Employee>      <Employee id="3">          <age>40</age>          <name>Tom</name>          <gender>Male</gender>          <role>Manager</role>      </Employee></Employees>

该xml文件存放员工信息,我们使用Employee类表示员工。

package com.journaldev.xml;public class Employee {      private int id;          private String name;          private String gender;          private int age;          private String role;          public int getId() {              return id;      }    public void setId(int id) {              this.id = id;      }    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:: ID="+this.id+" Name=" + this.name + " Age=" + this.age + " Gender=" + this.gender +                      " Role=" + this.role;      }    }
package com.journaldev.xml.jdom;  import java.io.File;  import java.io.FileInputStream;  import java.io.FileNotFoundException;  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 javax.xml.stream.XMLEventReader;  import javax.xml.stream.XMLInputFactory;  import javax.xml.stream.XMLStreamException;  import javax.xml.stream.XMLStreamReader;  import org.jdom2.Element;  import org.jdom2.JDOMException;  import org.jdom2.input.DOMBuilder;  import org.jdom2.input.SAXBuilder;  import org.jdom2.input.StAXEventBuilder;  import org.jdom2.input.StAXStreamBuilder;  import org.w3c.dom.Document;  import org.xml.sax.SAXException;  import com.journaldev.xml.Employee;  public class JDOMXMLReader {        public static void main(String[] args) {          final String fileName = "/Users/pankaj/employees.xml";          org.jdom2.Document jdomDoc;          try {              //we can create JDOM Document from DOM, SAX and STAX Parser Builder classes              jdomDoc = useDOMParser(fileName);              Element root = jdomDoc.getRootElement();              List<Element> empListElements = root.getChildren("Employee");              List<Employee> empList = new ArrayList<>();              for (Element empElement : empListElements) {                  Employee emp = new Employee();                  emp.setId(Integer.parseInt(empElement.getAttributeValue("id")));                  emp.setAge(Integer.parseInt(empElement.getChildText("age")));                  emp.setName(empElement.getChildText("name"));                  emp.setRole(empElement.getChildText("role"));                  emp.setGender(empElement.getChildText("gender"));                  empList.add(emp);              }              //lets print Employees list information              for (Employee emp : empList)                  System.out.println(emp);          } catch (Exception e) {              e.printStackTrace();          }        }          //Get JDOM document from DOM Parser      private static org.jdom2.Document useDOMParser(String fileName)              throws ParserConfigurationException, SAXException, IOException {          //creating DOM Document          DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();          DocumentBuilder dBuilder;          dBuilder = dbFactory.newDocumentBuilder();          Document doc = dBuilder.parse(new File(fileName));          DOMBuilder domBuilder = new DOMBuilder();          return domBuilder.build(doc);        }  }
Employee:: ID=1 Name=Pankaj Age=29 Gender=Male Role=Java DeveloperEmployee:: ID=2   Name=Lisa Age=35 Gender=Female Role=CEOEmployee:: ID=3 Name=Tom Age=40 Gender=Male Role=Manager

我们同样可以使用SAX和STAX解析机制来完成,我们可以使用下面方法完成:

/Get JDOM document from SAX Parserprivate static org.jdom2.Document useSAXParser(String fileName) throws JDOMException,          IOException {      SAXBuilder saxBuilder = new SAXBuilder();          return saxBuilder.build(new File(fileName));  }  //Get JDOM Document from STAX Stream Parser or STAX Event Parserprivate static org.jdom2.  Document useSTAXParser(String fileName, String type) throws FileNotFoundException, XMLStreamException, JDOMException{      if(type.equalsIgnoreCase("stream")){          StAXStreamBuilder staxBuilder = new StAXStreamBuilder();          XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();          XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(new FileInputStream(fileName));                  return staxBuilder.build(xmlStreamReader);      }      StAXEventBuilder staxBuilder = new StAXEventBuilder();      XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();      XMLEventReader xmlEventReader = xmlInputFactory.createXMLEventReader(new FileInputStream(fileName));          return staxBuilder.build(xmlEventReader);    }

JDOM 提供了非常优秀的Java XML API来更方便的读取、修改、生成XML文档。JDOM还提供了包装类供用户从SAX、DOM、STAX事件解析、STAX流解析中选择具体的实现。 在本教程中,我们一起学习使用JDOM將读取XML文件信息,并转换为Java对象。 JDOM并非标准JDK的一部分,因此使用JDOM需要从官方网站中下载JDOM的二进制包,下载后將JDOM的Jar包添加到工程的classpath中即可。 JDOM提供了包装类供我们选择底层的XML解析API,它提供了四个重要的类,我们可以使用它获取JDOM的Document对象。JDOM Document对象提供非常有用的方法来获取根元素,子元素列表,属性值等。 JDOM的重要的类: org.jdom2.input.DOMBuilder:使用DOM解析机制解析XML并将它转换为JDOM Document对象。 org.jdom2.input.SAXBuilder:使用SAX解析机制解析XML并转换为JDOM Document。 org.jdom2.input.StAXEventBuilderorg.jdom2.input.StAXStreamBuilder作用和前面两个类似,不再赘述。 org.jdom2.DocumentJDOM Document对象提供有用的方法获取根元素,读取或修改元素内容等操作,我们将要使用它获取XML的根元素。 org.jdom2.Document提供了有用的方法来获取子元素集合,获取子元素值,获取属性值等操作。 接下来我们开始使用案例程序读取XML文件并生成Java对象。 employees.xml

<?xml version="1.0" encoding="UTF-8"?><Employees>      <Employee id="1">          <age>29</age>          <name>Pankaj</name>          <gender>Male</gender>          <role>Java Developer</role>      </Employee>      <Employee id="2">          <age>35</age>          <name>Lisa</name>          <gender>Female</gender>          <role>CEO</role>      </Employee>      <Employee id="3">          <age>40</age>          <name>Tom</name>          <gender>Male</gender>          <role>Manager</role>      </Employee></Employees>

该xml文件存放员工信息,我们使用Employee类表示员工。

package com.journaldev.xml;  public class Employee {      private int id;          private String name;          private String gender;          private int age;          private String role;          public int getId() {              return id;      }    public void setId(int id) {              this.id = id;      }    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:: ID="+this.id+" Name=" + this.name + " Age=" + this.age + " Gender=" + this.gender +                      " Role=" + this.role;      }    }
package com.journaldev.xml.jdom;  import java.io.File;  import java.io.FileInputStream;  import java.io.FileNotFoundException;  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 javax.xml.stream.XMLEventReader;  import javax.xml.stream.XMLInputFactory;  import javax.xml.stream.XMLStreamException;  import javax.xml.stream.XMLStreamReader;  import org.jdom2.Element;import org.jdom2.JDOMException;  import org.jdom2.input.DOMBuilder;  import org.jdom2.input.SAXBuilder;  import org.jdom2.input.StAXEventBuilder;  import org.jdom2.input.StAXStreamBuilder;  import org.w3c.dom.Document;  import org.xml.sax.SAXException;  import com.journaldev.xml.Employee;  public class JDOMXMLReader {        public static void main(String[] args) {          final String fileName = "/Users/pankaj/employees.xml";          org.jdom2.Document jdomDoc;          try {              //we can create JDOM Document from DOM, SAX and STAX Parser Builder classes              jdomDoc = useDOMParser(fileName);              Element root = jdomDoc.getRootElement();              List<Element> empListElements = root.getChildren("Employee");              List<Employee> empList = new ArrayList<>();              for (Element empElement : empListElements) {                  Employee emp = new Employee();                  emp.setId(Integer.parseInt(empElement.getAttributeValue("id")));                  emp.setAge(Integer.parseInt(empElement.getChildText("age")));                  emp.setName(empElement.getChildText("name"));                  emp.setRole(empElement.getChildText("role"));                  emp.setGender(empElement.getChildText("gender"));                  empList.add(emp);              }              //lets print Employees list information              for (Employee emp : empList)                  System.out.println(emp);          } catch (Exception e) {              e.printStackTrace();          }        }          //Get JDOM document from DOM Parser      private static org.jdom2.Document useDOMParser(String fileName)              throws ParserConfigurationException, SAXException, IOException {          //creating DOM Document          DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();          DocumentBuilder dBuilder;          dBuilder = dbFactory.newDocumentBuilder();          Document doc = dBuilder.parse(new File(fileName));          DOMBuilder domBuilder = new DOMBuilder();          return domBuilder.build(doc);        }  }
Employee:: ID=1 Name=Pankaj Age=29 Gender=Male Role=Java DeveloperEmployee::   ID=2 Name=Lisa Age=35 Gender=Female Role=CEOEmployee:: ID=3 Name=Tom Age=40 Gender=Male Role=Manager

我们同样可以使用SAX和STAX解析机制来完成,我们可以使用下面方法完成:

/Get JDOM document from SAX Parserprivate static org.jdom2.Document useSAXParser(String fileName) throws JDOMException,          IOException {      SAXBuilder saxBuilder = new SAXBuilder();    return saxBuilder.build(new File(fileName));  }  //Get JDOM Document from STAX Stream Parser or STAX Event Parserprivate static org.jdom2.Document   useSTAXParser(String fileName, String type) throws FileNotFoundException, XMLStreamException, JDOMException{      if(type.equalsIgnoreCase("stream")){          StAXStreamBuilder staxBuilder = new StAXStreamBuilder();          XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();          XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(new FileInputStream(fileName));                  return staxBuilder.build(xmlStreamReader);      }      StAXEventBuilder staxBuilder = new StAXEventBuilder();      XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();      XMLEventReader xmlEventReader = xmlInputFactory.createXMLEventReader(new FileInputStream(fileName));          return staxBuilder.build(xmlEventReader);    }

以上就是Java&Xml教程(六)使用JDOM解析XML文件的内容,更多相关内容请关注PHP中文网(www.php.cn)!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:Java&Xml教程(五)使用SAX方式解析XML文件

相关资讯